NB : Le texte présenté ci-après est quasiment le même que celui du data paper publié dans Cybergéo. En revanche, les données et le code ont été mis à jour. Dernier passage sur ce document : 20 mars 2024.
Titre du data paper : « Les communes nouvelles françaises (2012-2022) : une méthode pour l’analyse de données à l’échelon municipal selon des limites évolutives » (Bideau, Ysebaert, 2022b)
Mise à jour après 2022 : G. Bideau.
Étapes à réaliser lors de la sortie de nouvelles données :
Importer manuellement le fichier des communes nouvelles (ici) et celui des tables de passages depuis 2003 (là).
Modifier le data_prep (et data_prep budget) en passant en revue les différents moments d’import des donnée et les “202x” dans le texte.
Après avoir rajouté la table de passage la plus récente ci-dessous, vérifier les doubles fusions et fusions successives (cf. quelques lignes de code dans la section 3.3.2, qui permettent simplement de les repérer).
Traiter manuellement la question de la néotoponymie dans le fichier ad hoc (“data-raw/communes_nouvelles/table_passage_perso_2012-20XX(01).csv”) :
Gabriel Bideau Université Paris Cité – UMR Géographie-Cités 8504 CNRS Campus des Grands Moulins Bâtiment Olympe de Gouges 8 place Paul Ricœur F-75013 Paris gabriel.bideau@gmail.com
Ronan Ysebaert Université Paris Cité – UMS 2414 Riate Campus des Grands Moulins Bâtiment Olympe de Gouges 8 place Paul Ricœur F-75013 Paris ronan.ysebaert@cnrs.fr
Ce data paper détaille la réalisation d’une base de données permettant de décrire le phénomène des créations des “communes nouvelles”, entre 2012 et 2024, en France. La création de ces nouvelles entités territoriales, par fusions de plusieurs communes, pose des problèmes d’appariement et de potentielles lacunes de données. À partir de données issues de la statistique publique (INSEE – Institut National de la Statistique et des Études Économiques – et IGN – Institut Géographique National), il s’agit de proposer un processus de compilation et d’agrégation des données pour les communes ayant fusionné. Cette contribution présente la méthode et assure les conditions de la reproductibilité.
This data paper presents the creation of a database to describe the phenomenon of “new municipalities” (communes nouvelles) between 2012 and 2024, in France. Potential data gap and consistency issues arise with the creation of these new territorial entities aggregating municipal mergers. Using data from official statistics (INSEE - National Institute for Statistics and Economic Studies - and IGN - National Geographic Institute), this paper describes a process of compilation and aggregation of data. The method is detailed here, to allow its reproducibility.
Administration, gouvernement local, fusion de données, recomposition territoriale, commune, France.
Administration, local government, data aggregation, territorial restructuring, municipality, France.
Depuis 2012, un mouvement sans précédent de constitution de “communes nouvelles” se déploie. Ces regroupements représentent 3,4% de la population française ; entre 2012 et le 1er janvier 2022, 2536 communes (soit 7% des communes françaises) ont contribué à la création de 787 communes nouvelles (Bideau, 2019). En effet, le maillage territorial français, parfois qualifié de « mille-feuille », a fait l’objet de nombreuses études et critiques, visant en particulier une hypothétique spécificité, bien déconstruite néanmoins (Grison, 2016).
L’échelon communal est sans doute celui qui a été le plus discuté, présenté comme le territoire d’identification d’une partie des citoyens mais également comme un résidu de la trame paroissiale d’Ancien Régime, cette dernière ayant été peu réformée depuis et aujourd’hui inadaptée à l’administration territoriale du fait du trop grand nombre d’entités (Ozouf-Marignier, Verdier, 2013). Cela a conduit l’État à mener des politiques de réduction du nombre de communes, comme dans les années 1970 avec les fusions dites « Marcellin » (Lenfant, 2018 ; Tellier, 2017). Aux tournant des années 2010, dans un contexte de transformation de l’organisation territoriale française1 plusieurs parlementaires et élus locaux ont voulu faciliter les fusions de communes en créant un statut plus attractif pour l’entité nouvellement créée. Il s’agira du statut de « commune nouvelle », créé par la loi du 16 décembre 2010, plus précisément les articles 21 à 25 du chapitre III au sein du Titre II « Adaptation des structures à la diversité des territoires » (“Loi n-1563 du 16 décembre 2010 de réforme des collectivités territoriales,” 2010), statut modifié ensuite (“Loi n-809 du 1er août 2019 visant à adapter l’organisation des communes nouvelles à la diversité des territoires,” 2019). Les premières fusions n’ont cependant pas eu lieu avant 2012, échéance qui borne le choix des données intégrées à la base que nous présentons. Des incitations fiscales seront ensuite votées pour tenter d’accélérer un mouvement d’abord timide (Bideau, 2019 ; Bideau, 2020).
La commune nouvelle est un statut qui permet à plusieurs communes (appelées historiques ou fusionnantes) de se regrouper pour ne former qu’une seule entité administrative (il n’y a plus qu’une seule personnalité juridique et budgétaire). Des subdivisions peuvent être maintenues à l’intérieur de la commune nouvelle : il s’agit des « communes déléguées ». Cependant, ces dernières n’ont qu’un rôle assez limité pour ne pas dire symbolique : il existe un conseil de la commune déléguée mais il est uniquement consultatif, un maire délégué peut être nommé mais avec des pouvoirs très restreints, il reste la possibilité de mentionner le nom de la commune déléguée dans l’état-civil etc.
Si les dimensions juridiques (Aubelle, 2016 ; Lenfant, 2018 ; Verpeaux, Pecheul, 2016) ou politiques (Frinault, 2017 ; Kada, 2017; Pasquier, 2017 ; Ville, 2017) ont été développées dans des travaux récents, la création de ces nouveaux périmètres de collectivités locales pose un certain nombre de problèmes lorsqu’il s’agit de traiter des données statistiques faisant référence aux communes. Il faut en effet procéder à des appariements de données sur des périmètres variables dans le temps, et donc la création de tables de passage. Une analyse plus détaillée et systématique du phénomène des communes nouvelles à l’échelle nationale a donc nécessité la création d’une base de données spécifique, qui est l’objet de cette contribution.
Lorsqu’il s’agit d’étudier les communes françaises, les données disponibles (par exemple via l’INSEE – Institut National de la Statistique et des Études Économiques) sont nombreuses mais sont en général fournies en fonction d’une géographie administrative spécifique – ne correspondant d’ailleurs pas toujours au millésime des données en question, qu’il s’agisse d’un délai de compilation des statistiques ou du fonctionnement du recensement en France qui repose sur la compilation de données issues de plusieurs enquêtes annuelles. L’étude des regroupements en devient malaisée. La base de données qui est présentée dans cet article, ainsi que le code qui y est associé ont pour objectif de permettre un travail d’analyse du phénomène de fusions en communes nouvelles.
Ce travail s’inscrit, plus globalement, dans une réflexion sur l’effet de MAUP (Openshaw, 1983 ; Wong, Amrhein, 1996 ; Sanders, 2009). Ce Modifiable Areal Unit Problem interroge l’impact du découpage dans la perception et l’analyse des phénomènes spatiaux, qu’il s’agisse d’un effet d’échelle (on ne perçoit pas les mêmes répartitions en fonction de l’échelle à laquelle les phénomènes sont représentés, par exemple la part de navetteurs travaillant hors de leur commune de résidence est mécaniquement réduite lors de fusions de communes) ou d’un effet de zonage (impact des délimitations, à l’intérieur d’un même espace). Ces redécoupages ne sont pas toujours exempts de manipulations des périmètres électoraux (gerrymandering) puisque l’effet de MAUP peut avoir des implications très concrètes sur les résultats d’élections (Bussi, Badariotti, 2004). Dans le cas des communes nouvelles, la création d’une nouvelle entité, qui sera prise en compte comme échelle de gouvernement, périmètre de partage fiscal ou encore modalité de calcul pour les flux de péréquation, peut engendrer un effet de MAUP : celui-ci est alors recherché comme permettant, par exemple, une péréquation des ressources entre des communes plus riches et moins riches. Notre base de données, permettant de différencier une vision avant fusion (les communes fusionnantes ou historiques) et une vision après fusion (les communes nouvelles), pourra être utilisée pour observer cet effet de MAUP comme cela a déjà été fait pour d’autres espaces (Gbenyo, Dubé, 2018).
Certains outils existent déjà pour gérer l’évolution des codes
géographiques officiels (code communal). Le plus pertinent est sans
doute le package COGugaison, construit pour le langage R
(Antunez, 2017). Ce dernier propose
plusieurs fonctionnalités : tout d’abord, il permet d’identifier le
millésime du code officiel géographique utilisé dans une base de données
et ensuite il propose quelques outils de visualisation des données au
cours du temps ou de fusions de données de stock2. L’originalité de la
démarche que nous proposons, outre de proposer une base déjà constituée,
est de fournir une méthode d’agrégation des données, quel que soit le
type de ces dernières (stock, ratio et variables textuelles). En
détaillant les changements liés à l’évolution des codes géographiques,
l’objectif est de permettre l’analyse des territoires construits par les
fusions communales.
Cet article présente une base permettant l’analyse des communes nouvelles, élaborée à partir des données issues de la statistique publique. Sa construction s’inscrit dans une démarche heuristique, dans le but de mieux appréhender l’objet d’étude que sont les communes nouvelles. Il a fallu, pour cela, non seulement gérer l’identification des entités territoriales à différentes dates mais aussi agréger les données de manière ad hoc et cohérente avec l’objet institutionnel ainsi remodelé. Les procédures utilisées pourront aisément être reproduites sur d’autres cas de fusions. En effet, la reconfiguration des territoires est un phénomène qui se retrouve à de multiples échelles, et bien plus largement que dans le cas français (Comité européen sur la démocratie locale et régionale (CDLR), 2007 ; Vanier, 2002). Les évolutions de la carte régionale suite à la loi NOTRe de 2015 ont par exemple déjà été étudiées avec plus ou moins de profondeur historique (Brennetot, Ruffray, 2014 ; Doré, 2021 ; Dumont, 2018) mais les possibilités d’analyses sont loin d’être épuisées dans le cadre municipal (Bideau, Ysebaert, 2022a).
Nous présenterons tout d’abord les objectifs généraux de la réalisation de cette base de données en posant les termes du problème de l’appariement, puis les données disponibles, avant de détailler les méthodes mises en œuvre et d’esquisser quelques applications possibles. Le data paper, la base de données et le code commenté sont diffusés de manière à permettre la reproductibilité de la démarche 3.
Les communes françaises sont identifiées par l’INSEE via un code
communal théoriquement unique (variable CODGEO), dont
l’usage est bien connu. Il est constitué de cinq chiffres, dont les deux
premiers (ou trois pour l’outre-mer) reprennent le numéro du département
concerné. À un instant t, chaque CODGEO ne fait référence qu’à
une seule commune, c’est de ce point de vue un identifiant unique.
Ce caractère unique du code communal n’est cependant pas stable dans le temps : outre quelques très rares cas de changements de CODGEO 4, lors des fusions, l’INSEE a choisi de donner à la nouvelle entité le code de la commune qui en devient le chef-lieu. Ce procédé, qui permet de ne pas avoir à recréer de nouveaux CODGEO pose un problème épineux si on fusionne des données de différentes années puisque l’appariement des séries statistiques peut être erroné, en raison des changements de périmètres. Cela implique alors de vérifier conjointement le millésime des données et le millésime des limites des communes.
À partir des données INSEE et du fond géographique de référence au 1er janvier 2011 (avant toute création de commune nouvelle), il s’agit de structurer la base de données pour qu’elle comporte :
Les géométries de référence au 1er janvier 2011 et au
1er janvier de l’année la plus récente pour laquelle des
données ont été publiées par l’INSEE, avec le même niveau de
généralisation cartographique. Ces objets sont appelés respectivement
geom2011 et geom_new.
Les géométries des communes qu’on nommera fusionnantes5, avant les
fusions, au 1er janvier 2011
(geomfus2011).
Les géométries des communes nouvelles, créées par les fusions en
question, à la date la plus récente connue
(geomCN_new).
Des données statistiques contextuelles pour l’ensemble des
communes existant en 2011, regroupées dans l’objet df2011.
Ces données couvrent des caractéristiques socio-économiques (emploi,
structure par âge, etc.), relatives à des zonages (EPCI d’appartenance,
catégories d’aires urbaines), et permettant de caractériser les fusions
communales à l’œuvre (quelles communes, laquelle devient chef-lieu, y
a-t-il création de communes déléguées, à quelle date etc). Précisons que
les données socio-économiques ou démographiques sont celles publiées en
fonction de la géographie administrative au 1er janvier 2011
mais sont présentées sous un millésime différent (elles sont le plus
souvent désignées comme étant les données 2009).
Ces mêmes données statistiques sont agrégées, suivant des
modalités dépendant de leur nature (valeurs de stock, ratios, valeurs
textuelles), pour constituer l’objet df_new, qui reprend la
géographie administrative la plus récente (ici celle au 1er
janvier 2024).
La jointure entre les données et les géométries de référence est évidemment facilitée pour permettre cartographie et analyse spatiale.
Il est à noter que le phénomène des communes nouvelles n’a, du moins pour l’instant, pas du tout touché les communes d’outre-mer ni celles de Corse. Par conséquent, du fait des spécificités territoriales et administratives de ces espaces, nous avons choisi de nous concentrer sur les seules communes de l’« Hexagone », Corse exclue.
Les sources utilisées pour la construction de données décrivant les communes fusionnées proviennent d’une part de l’IGN (Institut Géographique National) pour les géométries de référence nécessaires (2.1) et l’INSEE pour les données statistiques (2.2) ainsi que celles permettant de documenter les fusions de communes (2.3). Ces sources sont librement accessibles et permettent de redistribuer des données sources bien documentées selon des protocoles ouverts, compatibles avec les exigences de reproductibilité.
L’IGN propose des données multiples, dont un fond géographique à l’échelle des communes. Nous avons utilisé le fond Geofla®Communes édition 2011 (France Métropolitaine) puisque l’année 2011 est la dernière avant toute création de commune nouvelle.
Afin de caractériser les spécificités des communes nouvelles, plusieurs tables statistiques à l’échelon communal sont disponibles. Étudier l’ensemble des communes nouvelles impliquait de prendre comme point de départ la géographie administrative au 1er janvier 2011. Néanmoins, lorsque l’INSEE publie des données, le millésime annoncé est souvent différent de la géographie administrative utilisée (ces éléments sont alors documentés dans les métadonnées). Ainsi, les tables que nous avons utilisées sont généralement identifiées avec le millésime 20096 pour la géographie administrative au 1er janvier 2011.
Plusieurs bases de données ont été utilisées, détaillées dans le tableau 1. Le détail des variables retenues est accessible dans le tableau annexe 1, sachant que l’ajout de données supplémentaires présentes dans les bases utilisées est assez aisé7.
variables <- as.data.frame(read_excel("data-raw/meta.xlsx", sheet = "ind_target"))
# Pour sélectionner de nouvelles variables, cocher avec "X" dans le fichier meta.xlsx
target <- subset(variables, variable_selec == "X")
tableau <- unique(target[, c("SOURCE", "PRODUCTEUR", "Nom_fichier")])
colnames(tableau) <- c("Source", "Producteur", "Nom du fichier")
# knitr::kable(target[,c("INSEE_CODE","DESCRIPTION", "SOURCE", "PRODUCTEUR")], row.names = F, digits = 1) # Pour export html
ft <- flextable(tableau[2:nrow(tableau),])
ft <- set_caption(ft, caption = "Tableau 1 : Les bases de données utilisées")
ft <- width(ft, width = 1.7)
ft
Source | Producteur | Nom du fichier |
|---|---|---|
Table d'appartenance des communes (2011) | INSEE | table-appartenance-geo-communes-11.xls |
Base Emploi - population active en 2009 | INSEE | base-cc-emploi-pop-active-2009.xls |
Base Évolution et structure de la population en 2009 | INSEE | base-cc-evol-struct-pop-2009.xls |
Base Mobilités professionnelles en 2009 | INSEE | BTX_FM_DTR_2009.xls |
Potentiel financier | DGCL | Potentiel_financier_2011.xls |
Données comptables et fiscales des collectivités locales | DGCL | city_all.csv |
L'impôt sur le revenu par collectivité territoriale | Ministère de l'économie | Ircom_2011_revenus2010.xls |
Geofla®Communes édition 2011 (France Métropolitaine) | IGN | |
DGCL (Adrien Meo) | DGCL | CIF pour DGF 2012 et 2015.xls |
La table de passage communale produite par l’INSEE restitue l’ensemble des changements qui ont affecté des communes en France depuis 2003. Cette table ne concerne pas exclusivement les communes nouvelles.
Pour cette raison, nous avons associé à ce fichier d’origine d’autres tables mises à disposition par l’INSEE : la liste des communes nouvelles (un fichier par année depuis 2016). Ces dernières comportent, pour chaque commune ayant participé à une fusion, les informations avant et après ce changement, ainsi que la date de décision et d’effet8. Pour retracer les créations de communes nouvelles antérieures au 2 janvier 2015, un fichier a été créé à partir de l’interface d’historique des communes de l’INSEE.
Le tableau suivant présente le récapitulatif des informations mises à disposition par l’INSEE :
tab_passage <- as.data.frame(read_excel("data-raw/meta.xlsx", sheet = "tab_passage"))
tableau <- tab_passage[, c("INSEE_CODE", "DESCRIPTION", "SOURCE", "PRODUCTEUR")]
colnames(tableau) <- c("Nom de la variable", "Description", "Source", "Producteur")
# knitr::kable(tab_passage, row.names = F) # Pour export html
ft <- flextable(tableau)
ft <- set_caption(ft, caption = "Tableau 2 : Les données à disposition concernant les fusions")
ft <- width(ft, width = 1.7)
ft
Nom de la variable | Description | Source | Producteur |
|---|---|---|---|
annee_modif | Année de modification | Table d'appartenance géographique des communes et tables de passage | INSEE |
COM_FIN | Code INSEE de la commune finale | Table d'appartenance géographique des communes et tables de passage | INSEE |
COM_INI | Code INSEE Commune initiale | Table d'appartenance géographique des communes et tables de passage | INSEE |
LIB_COM_FIN | Libellé de la commune finale | Table d'appartenance géographique des communes et tables de passage | INSEE |
LIB_COM_INI | Libellé de la commune initiale | Table d'appartenance géographique des communes et tables de passage | INSEE |
DepComN | Code Insee de la commune nouvelle | Fichier des communes nouvelles créées en 20xx | INSEE (fichiers consolidés à partir de 2015) |
NomCN | Nom de la commune nouvelle | Fichier des communes nouvelles créées en 20xx | INSEE (fichiers consolidés à partir de 2015) |
DepComA | Code Insee de l'ancienne commune | Fichier des communes nouvelles créées en 20xx | INSEE (fichiers consolidés à partir de 2015) |
NomCA | Nom de l'ancienne commune | Fichier des communes nouvelles créées en 20xx | INSEE (fichiers consolidés à partir de 2015) |
ChefLieu | Statut de commune chef-lieu (O=OUI, N=NON) | Fichier des communes nouvelles créées en 20xx | INSEE (fichiers consolidés à partir de 2015) |
ComDLG | Statut de Commune déléguée (O=OUI, N=NON) | Fichier des communes nouvelles créées en 20xx | INSEE (fichiers consolidés à partir de 2015) |
Date1 | Date de l’arrêté préfectoral (JJ/MM/AAAA) | Fichier des communes nouvelles créées en 20xx | INSEE (fichiers consolidés à partir de 2015) |
Date1bis | Date de l’arrêté préfectoral modificatif (JJ/MM/AAAA) | Fichier des communes nouvelles créées en 20xx (à partir de 2018) | INSEE (fichiers consolidés à partir de 2015) |
Date2 | Date d'effet (si différente du 1er janvier de l'année suivante) | Fichier des communes nouvelles créées en 20xx | INSEE (fichiers consolidés à partir de 2015) |
Date3 | Date de publication au JO (renseignée si la parution au JO a eu lieu à la date de mise en ligne) | Fichier des communes nouvelles créées en 20xx (jusqu'en 2021) | INSEE (fichiers consolidés à partir de 2015) |
rm(tableau, ft, tab_passage)
Cette section détaille les étapes réalisées pour importer, préparer et agréger les données relatives à l’analyse du phénomène des communes nouvelles.
La construction des géométries de référence repose sur le fichier
géographique Geofla®Communes
édition 2011 France Métropolitaine (objet geom2011). Ce
choix limite la base aux communes dites métropolitaines, choix effectué
car le phénomène des communes nouvelles n’a jusqu’à présent pas touché
les communes ultra-marines. Les communes de Corse ont été également
supprimées, étant donné (1) qu’elles ne sont pas concernées par le
processus de création de communes nouvelles et (2) que cela permet
d’améliorer la résolution et simplicité des représentations
cartographiques.
Les arrondissements marseillais, lyonnais et parisiens ont été
agrégés au niveau communal pour un meilleur appariement avec les données
statistiques de référence utilisées ultérieurement. Ce fond communal a
également été agrégé au niveau départemental à des fins de
représentation cartographique (dep).
Le code communal (CODGEO) servant de référence pour les
jointures ultérieures avec les données attributaires a été extrait de
ces géométries.
# Géométries des communes françaises au 1er janvier 2011 (source : IGN)
geom2011 <- st_read(dsn = "data-raw/geom/COMMUNE.SHP")
## Reading layer `COMMUNE' from data source
## `/data/user/b/gbideau/Projet_CN_Serveur/data-raw/geom/COMMUNE.SHP'
## using driver `ESRI Shapefile'
## Simple feature collection with 36610 features and 18 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 99226 ymin: 6049647 xmax: 1242375 ymax: 7110524
## Projected CRS: RGF93 v1 / Lambert-93
geom2011 <- geom2011[geom2011$CODE_REG != "94",] # Suppression de la Corse
geom2011 <- st_transform(geom2011, crs = 3035) # Transformation Lambert-93
# Suppression et regroupement des arrondissements de Paris, Lyon et Marseille
arrcom <- read_excel("data-raw/geom/com_arm.xlsx") # Import de la table de passage des arrondissements
com <- merge(geom2011, arrcom, by = "INSEE_COM", all.y = TRUE) # Géométries des arrondissements
com <- aggregate(x = com[,"CODGEO"], by = list(com$CODGEO), # On les aggrège
FUN = head, 1)
com$NOM_COMM <- c("MARSEILLE", "LYON", "PARIS")
com$CODE_DEPT <- c("13","69","75")
geom2011 <- geom2011[!geom2011$INSEE_COM %in% arrcom$INSEE_COM, ] # Suppression des arrondissements
colnames(geom2011)[3] <- "CODGEO"
geom2011 <- rbind(geom2011[,c("CODGEO","NOM_COMM", "CODE_DEPT")],
com[,c("CODGEO","NOM_COMM", "CODE_DEPT")])
# Agrégation en départements
dep <- aggregate(x = geom2011[,"CODE_DEPT"], by = list(geom2011$CODE_DEPT), # Agrégation des communes en départements
FUN = head, 1)
# Création d'un data frame avec les CODGEO de référence
df <- st_set_geometry(geom2011[,c("CODGEO", "CODE_DEPT")], NULL)
# Forcer character
df$CODGEO <- as.character(df$CODGEO)
df$CODE_DEPT <- as.character(df$CODE_DEPT)
# download.file("https://www.insee.fr/fr/statistiques/fichier/6051727/departement_2022.csv", "data-raw/stats_insee/departement_2022.csv")
departements <- read.csv("data-raw/stats_insee/departement_2022.csv", sep = ",", stringsAsFactors = FALSE, fileEncoding = "UTF8")
dep <- merge(dep, departements[, c("DEP", "LIBELLE")], all.x = TRUE, all.y = FALSE, by.x = "CODE_DEPT", by.y = "DEP")
rm(departements)
Les différentes données, contenues dans les sources présentées plus
haut (Tableau 1) et permettant d’obtenir les indicateurs choisis
(Tableau annexe 1) ont été importées9. La jointure a été réalisée à l’aide des
codes communaux 2011, l’ensemble constituant alors l’objet
df2011.
# Importer les tableaux de données d'intérêt
datatmp1 <- data.frame(read_excel("data-raw/stats_insee/base-cc-emploi-pop-active-2009.xls", sheet = "COM_2009", skip = 5))
datatmp2 <- data.frame(read_excel("data-raw/stats_insee/base-cc-evol-struct-pop-2009.xls", sheet = "COM_2009", skip = 5))
datatmp3 <- data.frame(read_excel("data-raw/stats_insee/BTX_FM_DTR_2009.xls", sheet = "TOTAL", skip = 5))
datatmp4 <- data.frame(read_excel("data-raw/stats_insee/Potentiel_financier_2011.xls", sheet = "Rapport1", skip = 2))
datatmp5 <- data.frame(read_excel("data-raw/stats_insee/table-appartenance-geo-communes-11.xls", sheet = "Liste_COM", skip = 5))
datatmp6 <- read.csv("data-raw/stats_insee/city_all.csv", sep = ",", stringsAsFactors = FALSE, fileEncoding = "UTF8")
datatmp6 <- subset(datatmp6, datatmp6$année == "2011")
# Nécessité d'une procédure un peu plus longue pour les données concernant les revenus
# À noter que des messages d'alertes s'affichent mais sans gravité
sheet_names <- excel_sheets("data-raw/stats_insee/Ircom_2011_revenus2010.xls") # On liste les feuilles
datatmp7 <- data.frame()
for (i in 1:length(sheet_names)){
feuille <- sheet_names[i] # récupère le nom de la feuille
IRFeuille <- data.frame(read_excel("data-raw/stats_insee/Ircom_2011_revenus2010.xls", sheet = feuille, skip = 20))
datatmp7 <- rbind(datatmp7, IRFeuille, stringsAsFactors = FALSE)
rm(feuille, IRFeuille) # suppression des objet intermédiaires
}
# Renommer variables
colnames(datatmp7)[10] <- "Traitements.et.salaires_Nbr.foyers"
colnames(datatmp7)[11] <- "Traitements.et.salaires_Montant"
colnames(datatmp7)[12] <- "Retraites.et.pensions_Nbr.foyers"
colnames(datatmp7)[13] <- "Retraites.et.pensions_Montant"
datatmp7 <- subset(datatmp7, datatmp7$Revenu.fiscal.de.référence.par.tranche..en.euros. == "Total") # Sélection des seules variables totales
datatmp7[, c(5:length(datatmp7))]<- lapply(datatmp7[, c(5:length(datatmp7))], as.numeric) # Variables en numériques
# Création d'un CODGEO
datatmp7$CODGEO <- substr(datatmp7$DÉP, 1, 2)
datatmp7$CODGEO <- paste(datatmp7$CODGEO, datatmp7$Commune, sep = "")
superficie <- geom2011
superficie$superficie <- st_area(superficie) # Attention, unités : m²
superficie$superficie <- set_units(superficie$superficie, km^2) # On passe en km²
st_geometry(superficie) <- NULL
# Le Coefficient d'Intégration Fiscale (CIF), va être compris comme étant du texte lors de l'agrégation des géométries, puisqu'il s'agit d'un ratio dont on n'a pas le dénominateur
CIF_2012 <- read_excel("data-raw/budgets/CIF pour DGF 2012 et 2015.xls",
sheet = "CIF pour DGF 2012")
colnames(CIF_2012)
## [1] "N° Siren Goupement" "Nom groupement"
## [3] "CIF Coefficient Integration Fiscale"
colnames(CIF_2012) <- c("EPCI_2012", "Nom_EPCI_2012", "CIF_2012")
CIF_2015 <- read_excel("data-raw/budgets/CIF pour DGF 2012 et 2015.xls",
sheet = "CIF pour DGF 2015")
colnames(CIF_2015)
## [1] "N° Siren Goupement" "Nom groupement"
## [3] "CIF Coefficient Integration Fiscale"
colnames(CIF_2015) <- c("EPCI_2015", "Nom_EPCI_2015", "CIF_2015")
# Jointure avec le champ CODGEO 2011 de référence (issu des géométries)
df <- merge(df, datatmp1, by = "CODGEO", all.x = TRUE)
df <- merge(df, datatmp2[,c(1, 5:length(datatmp2))], by = "CODGEO", all.x = TRUE)
df <- merge(df, datatmp3[,c(1, 3:length(datatmp3))], by = "CODGEO", all.x = TRUE)
df <- merge(df, datatmp4, by.x = "CODGEO", by.y = "Code.INSEE", all.x = TRUE)
df <- merge(df, datatmp5[,c(1, 5:length(datatmp5))], by = "CODGEO", all.x = TRUE)
df <- merge(df, datatmp6[,c(5, 12)], by.x = "CODGEO", by.y = "cog..code.officiel.géographique.", all.x = TRUE)
df <- merge(df, datatmp7[,c(5:length(datatmp7))], by = "CODGEO", all.x = TRUE)
df <- merge(df, superficie[,c("CODGEO", "superficie")], by = "CODGEO")
df <- merge(df, CIF_2012, by.x = "EPCI", by.y = "EPCI_2012", all.x = TRUE)
df <- merge(df, CIF_2015, by.x = "EPCI", by.y = "EPCI_2015", all.x = TRUE)
# Ne conserver que les indicateurs d'intérêt
selec <- target$INSEE_CODE
df2011 <- df[,selec]
# Renommer le code des variables
colnames(df2011) <- target$recoding
Les catégories du Zonage en Aires Urbaines (ZAU) ont également été regroupées, pour faciliter les analyses de cette typologie. Outre les catégories proposées par l’INSEE (comme l’espace périurbain regroupant les communes codées 112 et 120), des catégories ont été rajoutées comme les communes constituant les petits pôles (codes ZAU 221 et 222).
# Pour créer des catégories plus vastes à partir des
# Utilisation du ZAU pour cibler les communes appartenant à un petit pôle (unité urbaine et couronne)
# Utilisation du ZAU pour cibler les communes constituant les petits pôles
df2011$ZAU_POL [df2011$CATAEU2010 %in% c("221", "222")] <- "OUI"
# Utilisation du ZAU pour cibler les communes du rural profond
df2011$ZAU_RUR [df2011$CATAEU2010 %in% c("300", "400")] <- "OUI"
# Utilisation du ZAU pour cibler les communes du rural profond + couronnes petits pôles : Marges Sans Pôles
df2011$ZAU_MAR_SP [df2011$CATAEU2010 %in% c("222", "300", "400")] <- "OUI"
# Utilisation du ZAU pour cibler les communes du rural profond + petits pôles et couronnes
df2011$ZAU_MAR [df2011$CATAEU2010 %in% c("221", "222", "300", "400")] <- "OUI"
# Utilisation du ZAU pour cibler les communes périurbaines et les autres
df2011$ZAU_PERI [df2011$CATAEU2010 %in% c("112", "120")] <- "OUI"
# Utilisation du ZAU pour cibler les communes des Grandes aires urbaines, des aires urbaines et les autres
df2011$ZAU_AU [df2011$CATAEU2010 %in% c("111", "112", "120")] <- "GrdAirUrb"
df2011$ZAU_AU [df2011$CATAEU2010 %in% c("211", "212", "221", "222")] <- "AirUrb"
df2011$ZAU_AU [df2011$CATAEU2010 %in% c("300", "400")] <- "Autres"
# Tout ce qui ne fait pas partie des catégories = NON
selecV <- c("ZAU_POL", "ZAU_RUR", "ZAU_MAR_SP", "ZAU_MAR", "ZAU_PERI", "ZAU_AU")
df2011[selecV][is.na(df2011[selecV])] <- "NON"
# # Si on souhaite, transformation en facteur des catégories des aires urbaines
# df2011$CATAEU2010 <- as.factor(df2011$CATAEU2010)
# df2011$CODGEO <- as.character(df2011$CODGEO)
Afin de créer les informations chronologiques sur les fusions communales, la table de passage communale a constitué la source primaire, présentant l’ensemble des mutations qui ont touché des communes en France depuis 2003. Ont également été utilisées les tables mises à disposition par l’INSEE (un fichier par année depuis 2016).
Cette démarche permettra de compléter aisément le fichier à l’avenir,
pour tenir compte d’éventuelles nouvelles fusions. Il suffira de
rajouter les fichiers les plus récents (dans le dossier
data-raw comme dans le code) :
La nouvelle table concernant les fusions de l’année écoulée (2024 par exemple, donc situation au 1er janvier 2025) ;
La table de passage (s’appelant probablement 2003-2024) ;
La table d’appartenance (s’appelant probablement 2024)10.
# Import de la liste des fusions (cf. plus bas pour l'utilisation)
# comFus <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2020.xlsx", sheet = "Liste des fusions", skip = 5))
# comFus <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2021.xlsx", sheet = "Liste des fusions", skip = 5))
# comFus <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2022.xlsx", sheet = "Liste des fusions", skip = 5))
# comFus <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2023.xlsx", sheet = "Liste des fusions", skip = 5))
comFus <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2024.xlsx", sheet = "Liste des fusions", skip = 5))
# Import de la liste des scissions (cf. plus bas pour l'utilisation)
# comSci <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2020.xlsx", sheet = "Liste des scissions", skip = 5))
# comSci <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2021.xlsx", sheet = "Liste des scissions", skip = 5))
# comSci <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2022.xlsx", sheet = "Liste des scissions", skip = 5))
# comSci <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2023.xlsx", sheet = "Liste des scissions", skip = 5))
comSci <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2024.xlsx", sheet = "Liste des scissions", skip = 5))
# Import de la table de passage (cf. plus bas pour l'utilisation)
# modif <- as.data.frame(read_xlsx("data-raw/communes_nouvelles/table_passage_geo2003_geo2020.xlsx", col_types = "text", sheet = "Table de passage", skip = 5))
# modif <- as.data.frame(read_xlsx("data-raw/communes_nouvelles/table_passage_geo2003_geo2021.xlsx", col_types = "text", sheet = "Table de passage", skip = 5))
# modif <- as.data.frame(read_xlsx("data-raw/communes_nouvelles/table_passage_geo2003_geo2022.xlsx", col_types = "text", sheet = "Table de passage", skip = 5))
# modif <- as.data.frame(read_xlsx("data-raw/communes_nouvelles/table_passage_geo2003_geo2023.xlsx", col_types = "text", sheet = "Table de passage", skip = 5))
modif <- as.data.frame(read_xlsx("data-raw/communes_nouvelles/table_passage_geo2003_geo2024.xlsx", col_types = "text", sheet = "Table de passage", skip = 5))
colnames(modif) <- c("CODGEO_INI", "CODGEO_new", "LIBGEO_new" )
# NB : La manière de présenter les communes ayant connu une scission est différente à partir de la table 2003-2024
# Par exemple la commune de Ouézy est présente deux fois dans la table 2003-2024 avec comme CODE_INI et CODGEO_INI et CODGEO_2024 respectivement de 14149 et 14482 pour une ligne, 14149 et 14149 pour l'autre.
# Alors que dans la table 2003-2024, il n'y avait que la ligne 14482-14482.
# La raison de ce changement m'échappe mais on procède à quelques manipulations pour retirer la ligne où les deux codes diffèrent, et ce pour l'ensemble des communes ayant connu une scission.
pr_suppr_doublons <- subset (comSci, comSci$COM_INI != comSci$COM_FIN)
# Création d'un champ concaténant les deux CODGEO en question
pr_suppr_doublons$conc <- paste(pr_suppr_doublons$COM_INI, "-", pr_suppr_doublons$COM_FIN)
modif$conc <- paste(modif$CODGEO_INI, "-", modif$CODGEO_new)
modif <- subset(modif, !(modif$conc %in% pr_suppr_doublons$conc))
modif <- modif[,-4]
rm(pr_suppr_doublons)
# Import de la table d'appartenance de l'année la plus récente (cf. plus bas pour l'utilisation)
# df_new <- data.frame(read_excel("data-raw/stats_insee/table-appartenance-geo-communes-20_zonages20_v2022-09-27.xlsx", sheet = "COM", skip = 5))
# df_new <- data.frame(read_excel("data-raw/stats_insee/table-appartenance-geo-communes-21_v2022-09-27.xlsx", sheet = "COM", skip = 5))
# df_new <- data.frame(read_excel("data-raw/stats_insee/table-appartenance-geo-communes-22.xlsx", sheet = "COM", skip = 5))
# df_new <- data.frame(read_excel("data-raw/stats_insee/table-appartenance-geo-communes-23.xlsx", sheet = "COM", skip = 5))
df_new <- data.frame(read_excel("data-raw/stats_insee/table-appartenance-geo-communes-24.xlsx", sheet = "COM", skip = 5))
Nous avons commencé par identifier les communes ayant pris part à une
fusion en utilisant la table de passage globale fournie par l’INSEE
depuis la géométrie de 2003. Cette table comprend comporte une page
dédiée à toutes les fusions depuis cette date. Elle comprend donc aussi
des fusions de communes qui n’ont pas créé de communes nouvelles,
puisque ce statut n’apparaît qu’en 2010 et n’est utilisé pour la
première fois qu’en 2012. C’est le sens de la distinction entre le champ
FUSION qui a été créé d’abord (désignant n’importe quelle
fusion de commune) et le champ COM_NOUV, créé dans un
second temps, qui concerne bien les seules communes participant à la
création de communes nouvelles.
# Pour rappel, comFus est la feuille "Liste des fusions", disponible dans le fichier "table_passage_geo2003-geoxxxx". Elle a été importée plus haut
# Pour éviter les doublons dans la table INSEE
comFus <- aggregate(x = comFus, by = list(comFus$COM_INI),
FUN = head, 1) # On garde le premier élément (car df trié par date)
# Renommer avec la commune fusionnée la plus récente
comFus <- comFus[order(comFus$ANNEE_MODIF, decreasing = TRUE),] # Pour année 2022, ANNEE_MODIF en minuscule(annee_modif)
comFus$LIB_COM_FIN <- ave(comFus$LIB_COM_FIN, comFus$COM_FIN, FUN = function(x) x[1])
comFus <- comFus[,c(2:length(comFus))]
# Identification des communes fusionnantes dans la table d'entrée
df2011 <- merge(df2011, comFus[,c("COM_INI", "ANNEE_MODIF")], by.x = "CODGEO",
by.y = "COM_INI", all.x = TRUE)
df2011$ANNEE_MODIF[!is.na(df2011$ANNEE_MODIF)] <- "OUI"
df2011$ANNEE_MODIF[is.na(df2011$ANNEE_MODIF)] <- "NON"
colnames(df2011)[length(df2011)] <- "FUSION"
Les informations contenues dans les tables de passage par années (celles fournies année par année depuis 2016 par l’INSEE et celle créée manuellement pour les fusions ayant eu lieu entre 2012 et le 1er janvier 2015) ont été ajoutées : elles décrivent des communes créées après l’élaboration du statut de commune nouvelle (par la loi du 16 décembre 2010 intitulée « Loi de réforme des collectivités territoriales », cf. plus haut) et sont davantage détaillées concernant ces fusions (création ou non de communes déléguées et date de création sont par exemple renseignées)11.
Certains cas particuliers ont demandé un traitement spécifique :
Bettoncourt-le-Haut a fusionné en 1972 avec Épizon, sous le statut de commune-associée. Au 1er janvier 2013, avec la création de la commune-nouvelle d’Épizon, la commune de Bettoncourt-le-Haut est devenue commune déléguée. Comme on ne disposait pas des données 2011 pour Bettoncourt-le-Haut, on a préféré ignorer cette dernière en considérant que la commune nouvelle d’Épizon est le résultat de la fusion des seules Épizon et Pautaines-Augeville (source : fiche spécifique de l’INSEE).
Il a été également nécessaire de traiter individuellement le cas de la commune de L’Oudon, qui a changé de code communal à plusieurs reprises : issue de la fusion-association de dix communes en 1973, elle avait jusqu’en 1990 le code 14472. Du fait d’un transfert de chef-lieu, le code a été modifié en 14697. Après un nouveau transfert de chef-lieu en 2014, l’INSEE a décidé en 2016 de ré-attribuer le code de 14472. Cette commune a ensuite fusionné au 1er janvier 2017 au sein de la commune nouvelle de Saint-Pierre-en-Auge. Pour éviter les problèmes d’association entre les données, nous avons laissé l’ancien code 14697, qui est celui utilisé dans les données INSEE que nous avons utilisées (millésime 2011). Cf. ici pour plus de détails.
Pour faciliter la lecture des dynamiques, et sans empêcher néanmoins l’étude par date précise (en fonction des années, cf. graphique 1 dans la section 4, voire mois et jour), nous avons distingué plusieurs vagues de fusions en fonction de leur intensité12 13 :
une première phase, peu intense, concernant 73 communes (se regroupant en 26 communes nouvelles), entre le 1er janvier 2011 et le 1er janvier 2015 inclus ;
ensuite, le nombre plus important de fusions a conduit à isoler chaque année 2015, 2016, 2017 et 2018 dans quatre phases distinctes ;
enfin, la période des années 2019, 2020, 2021, 2022 et 2023 (jusqu’au 1er janvier 2024), moins intense en terme de fusions, a été regroupée dans une seule phase.
Cette périodisation pourra être modifiée en fonction d’évolutions les prochaines années (la poursuite des fusions est probable) ou d’autres choix chronologiques.
# Import tables de référence INSEE
tmp <- data.frame(read_excel("data-raw/communes_nouvelles/communes_nouvelles_2012_2014.xls", sheet = "Communes_nouvelles_2012_2014"))
# Traitement du cas particulier de Bettoncourt-le-Haut et Épizon
tmp <- subset (tmp, DepComA != "52046")
tmp1 <- data.frame(read_excel("data-raw/communes_nouvelles/communes_nouvelles_2015.xls", sheet = "Communes nouvelles 2015"))
tmp1$Date2[is.na(tmp1$Date2)] <- "01/01/2016"
tmp2 <- data.frame(read_excel("data-raw/communes_nouvelles/communes_nouvelles_2016.xls", sheet = "Communes nouvelles 2016"))
tmp2$Date2[is.na(tmp2$Date2)] <- "01/01/2017"
# Traitement du cas particulier de la commune de L'Oudon
# tmp2$DepComA[tmp2$NomCA == "Oudon (L')"] <- "14697"
tmp2$DepComA[tmp2$DepComA == "14472"] <- "14697"
tmp3 <- data.frame(read_excel("data-raw/communes_nouvelles/communes_nouvelles_2017.xls", sheet = "Communes nouvelles 2017"))
tmp3$Date2[is.na(tmp3$Date2)] <- "01/01/2018"
tmp4 <- data.frame(read_excel("data-raw/communes_nouvelles/communes_nouvelles_2018.xls", sheet = "Communes_nouvelles_2018"))
tmp4$Date2[is.na(tmp4$Date2)] <- "01/01/2019"
tmp5 <- data.frame(read_excel("data-raw/communes_nouvelles/communes_nouvelles_2019.xls", sheet = "Communes_nouvelles_2019"))
tmp6 <- data.frame(read_excel("data-raw/communes_nouvelles/communes_nouvelles_2020.xlsx", sheet = "Communes_nouvelles_2020"))
# Pour mettre les dates au même format que les fichiers précédents
tmp6$Date1 <- format(as.Date(tmp6$Date1, format = "%Y-%m-%d"),"%d/%m/%Y")
tmp6$Date2 <- format(as.Date(tmp6$Date2, format = "%Y-%m-%d"),"%d/%m/%Y")
tmp7 <- data.frame(read_excel("data-raw/communes_nouvelles/communes_nouvelles_2021.xlsx", sheet = "Communes_nouvelles_2021"))
# Pour mettre les dates au même format que les fichiers précédents
tmp7$Date1 <- format(as.Date(tmp7$Date1, format = "%Y-%m-%d"),"%d/%m/%Y")
tmp7$Date2 <- format(as.Date(tmp7$Date2, format = "%Y-%m-%d"),"%d/%m/%Y")
# On rajoute la colonne Date3 pour faciliter le regroupement des tableaux ensuite.
# Ce champ, correspondant à la date de publication de l'arrêté au JO, n'est pas utilisé dans la suite de l'analyse. Il n'est plus renseigné à partir du fichier des fusions ayant eu lieu jusqu'au 1er janvier 2022
tmp7$Date3 <- NA
tmp8 <- data.frame(read_excel("data-raw/communes_nouvelles/communes_nouvelles_2022.xlsx", sheet = "Communes_nouvelles_2022"))
# Pour mettre les dates au même format que les fichiers précédents
tmp8$Date1 <- format(as.Date(tmp8$Date1, format = "%Y-%m-%d"),"%d/%m/%Y")
tmp8$Date2 <- format(as.Date(tmp8$Date2, format = "%Y-%m-%d"),"%d/%m/%Y")
# On rajoute la colonne Date3 pour faciliter le regroupement des tableaux ensuite.
tmp8$Date3 <- NA
tmp9 <- data.frame(read_excel("data-raw/communes_nouvelles/communes_nouvelles_2023.xlsx", sheet = "Communes_nouvelles_2023"))
# Pour mettre les dates au même format que les fichiers précédents
tmp9$Date1 <- format(as.Date(tmp9$Date1, format = "%Y-%m-%d"),"%d/%m/%Y")
tmp9$Date2 <- format(as.Date(tmp9$Date2, format = "%Y-%m-%d"),"%d/%m/%Y")
# On rajoute la colonne Date3 pour faciliter le regroupement des tableaux ensuite.
tmp9$Date3 <- NA
# Regroupement des colonnes identiques des différents dataframe
comNew <- data.frame()
list_df <- list(tmp, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9)
for(item in list_df){
items <- item[, names(tmp)] # La référence sont les noms de colonne du premier fichier
comNew <- rbind(comNew, items)
}
# Supprimer lignes qui ne concernent que des commentaires dans la feuille excel importée
comNew <- subset(comNew, comNew$DepComN != "NA")
# test <- dplyr::anti_join(comNew, comNew2) # Si on souhaite identifier ces erreurs
# Reformatage de l'année de fusion
comNew$FusDate <- as.Date(comNew$Date2, tryFormats = "%d/%m/%Y")
# Découpage en phases temporelles de fusion
comNew$FusPhas <- cut(comNew$FusDate,
breaks = as.Date(c("2011-1-1", "2015-1-2", "2016-1-2",
"2017-1-2","2018-1-2", "2019-1-2","2024-1-2")),
labels = c("Phase 1", "Phase 2", "Phase 3", "Phase 4", "Phase 5", "Phase 6"))
# Pour fusions successives et à code DepComA identique, ne conserver que l'élément le plus ancien
comNew <- aggregate(x = comNew, by = list(comNew$DepComA), # on évite les doublons
FUN = head, 1) # On ne garde que le premier élément (comNew trié par ordre chronologique)
# Prise en compte du dernier nom de commune nouvelle
comNew <- comNew[order(comNew$FusDate, decreasing = TRUE),]
comNew$NomCN <- ave(comNew$NomCN, comNew$DepComN, FUN = function(x) x[1])
comNew <- comNew[,c(2:length(comNew))] # Ne garder que les colonnes utiles
# Jointure avec le fichier d'origine
df2011 <- merge(df2011, comNew[,c("DepComA","ChefLieu","ComDLG", "FusDate","FusPhas")],
by.x = "CODGEO", by.y = "DepComA", all.x = TRUE, all.y = TRUE)
# Identification communes nouvelles
df2011$COM_NOUV[!is.na(df2011$FusPhas)] <- "OUI"
df2011$COM_NOUV[is.na(df2011$FusPhas)] <- "NON"
df2011$FusPhas <- as.character(df2011$FusPhas)
# Pour comparer les données issues de la table générale et celles compilées à partir des tables années par années, on peut créer l'objet suivant :
DiffcomFuscomNew <- dplyr::anti_join(comFus, comNew, by = c("COM_INI" = "DepComA"))
# Les principales différences sont bien liées à la période plus large de la table générale (prend en compte les fusions avant 2011, qui ne sont pas des communes nouvelles)
# Pour observer s'il y a des doubles fusions, les doublons et les fusions successives entre deux dates :
DoublesFusions <- merge(tmp, tmp1, by.x = "DepComN", by.y = "DepComA")
# En fonction de l'ensemble des dates sauf la dernière
PrFusions <- comNew[comNew$FusDate <= "2022-01-01",]
DoublesFusions <- merge(PrFusions, tmp9, by.x = "DepComN", by.y = "DepComA")
rm(item, items, list_df, PrFusions,DoublesFusions)
Dans la table de passage, des scissions communales sont mentionnées. Une étape supplémentaire a permis que ces dernières ne soient pas considérées comme des fusions ou des communes nouvelles.
Il faut, là encore, noter un cas particulier : en 2012, la commune de Robert-Magny-Laneuville-à-Rémy (52427) se scinde en Robert-Magny (52427) et Laneuville-à-Rémy (52266). Au 1er janvier 2016, Robert-Magny fusionne avec Montier-en-Der (52331) pour former La Porte du Der (52331). Comme on ne disposait pas des données de recensement en 2011 pour Laneuville-à-Rémy, on a préféré ignorer cette scission et cette dernière commune n’apparaît donc pas dans notre base de données (source : fiche spécifique de l’INSEE).
# Objectif : que tout ce qui est scission ne soit pas considéré comme commune nouvelle ou fusion
# Pour rappel, comSci est la feuille "Liste des scissions", disponible dans le fichier "table_passage_geo2003-geoxxxx". Elle a été importée plus haut
# Cas particulier de la commune de Robert-Magny-Laneuville-à-Rémy (52427).
comSci <- subset(comSci, COM_INI != "52427")
code_comSci <- as.vector(unique(comSci$COM_FIN))
df2011$FUSION [df2011$CODGEO %in% code_comSci] <- "NON"
df2011$COM_NOUV [df2011$CODGEO %in% code_comSci] <- "NON"
df2011$ChefLieu [df2011$CODGEO %in% code_comSci] <- NA
df2011$ComDLG [df2011$CODGEO %in% code_comSci] <- NA
df2011$FusDate [df2011$CODGEO %in% code_comSci] <- NA
df2011$FusPhas [df2011$CODGEO %in% code_comSci] <- NA
df2011$FusDate <- as.character(df2011$FusDate)
test <- subset (df2011, df2011$CODGEO == "14149")
test <- subset (df2011, df2011$LIBGEO == "Ouézy")
# df2011_sauvegarde <- df2011
Une étape majeure a ensuite été l’agrégation des indicateurs, pour
les communes ayant fusionné. Cette agrégation, souvent simple pour les
variables de stock (additions des données des communes fusionnantes), a
présenté davantage de difficultés pour le traitement des ratios. Pour ce
faire, une fonction spécifique, comix, a été créée. Elle
permet d’agréger les données selon leurs natures. Les données
textuelles, si elles ne sont pas identiques, sont concaténées, les
variables de stock sont additionnées, les variables de ratio (qui
pourraient, pour certaines, également être recalculées à partir des
variables de stock) sont pondérées en fonction du dénominateur adapté
(indiqué dans les métadonnées), pouvant être la population, le nombre
d’actifs, le nombre de foyers etc.
Nous avons importé, au préalable, les zonages de référence pour
l’année la plus récente, ce qui permet d’avoir les informations les plus
à jour possible (cas de quelques communes ayant changé de département
avec les fusions). Ce sont ces zonages qui constituent le matériau de
base de l’objet df_new.
# Pour rappel, df_new est la table d'appartenance à l'année la plus récente. Elle a été importée plus haut.
df_new <- df_new[,c("CODGEO","LIBGEO","DEP","REG")] # NB : certains éléments ne sont plus dans les données à partir du 1er janvier 2021 : "CATAEU2010","AU2010", "EPCI"... Ont donc été supprimées. Il faudra songer à intégrer le nouveau zonage lorsqu'il sera disponible. Ci-dessous, commenté, le code qui servait à l'intégration des données jusqu'en 2020
# df_new <- df_new[,c("CODGEO","LIBGEO","DEP","REG","CATAEU2010","AU2010","EPCI")]
# colnames(df_new)[1:3] <- c("CODGEO_new","LIBGEO_new","CODE_DEPT")
# # Création catégories
# df_new$ZAU_POL [df_new$CATAEU2010 %in% c("221", "222")] <- "OUI"
# df_new$ZAU_RUR [df_new$CATAEU2010 %in% c("300", "400")] <- "OUI"
# df_new$ZAU_MAR_SP [df_new$CATAEU2010 %in% c("222", "300", "400")] <- "OUI"
# df_new$ZAU_MAR [df_new$CATAEU2010 %in% c("221", "222", "300", "400")] <- "OUI"
# df_new$ZAU_PERI [df_new$CATAEU2010 %in% c("112", "120")] <- "OUI"
# df_new$ZAU_AU [df_new$CATAEU2010 %in% c("111", "112", "120")] <- "GrdAirUrb"
# df_new$ZAU_AU [df_new$CATAEU2010 %in% c("211", "212", "221", "222")] <- "AirUrb"
# df_new$ZAU_AU [df_new$CATAEU2010 %in% c("300", "400")] <- "Autres"
# # Tout ce qui ne fait pas partie des catégories = NON
# selecV <- c("ZAU_POL", "ZAU_RUR", "ZAU_MAR_SP", "ZAU_MAR", "ZAU_PERI", "ZAU_AU")
# df_new[selecV][is.na(df_new[selecV])] <- "NON"
colnames(df_new) <- c("CODGEO_new","LIBGEO_new","CODE_DEPT_new", "REG_new")
# df_new_sauvegarde <- df_new
# Nous utilisons ici la fonction `comix` pour agréger les données d'intérêt en fonction de la géographie la plus récente (ici, au 1^er^ janvier 2021). La table `df_new` ainsi créée nous permet donc, pour chaque variable choisie (stock et ratio), de disposer des données pour les entités à la géométrie la plus récente.
# Agrégation des données de 2011 vers l'année la plus récente (stock + texte)
# Import de la table de passage : "modif"
# Pour rappel, modif est la feuille "Table de passage", disponible dans le fichier "table_passage_geo2003-geoxxxx". Elle a été importée plus haut
# Agrégation
# Attention à bien indiquer la nature pour chaque variable visée
tmp <- comix(x = df2011, xid = "CODGEO", app = modif,
app.init = "CODGEO_INI", app.target = "CODGEO_new",
var = c(target$recoding, "FUSION", "FusDate", "FusPhas", "COM_NOUV"),
var.type = c(target$type_variable, rep("text",4)))
# Gestion des "OUI-NON" > transformé en "OUI"
selec <- c("FUSION", "COM_NOUV")
tmp[,selec][tmp[,selec] == "OUI-NON"] <- "OUI"
tmp[,selec][tmp[,selec] == "NON-OUI"] <- "OUI"
# Jointure avec le fichier de référence le plus récent
df_new <- merge(df_new, tmp, by.x = "CODGEO_new", by.y = "CODGEO_new",
all.x = TRUE)
# Suppression des territoires corses, des DOM et des communes associées (pas de geom)
depsuppr <- c("94","01","02","03","04","06")
df_new <- df_new[!df_new$REG %in% depsuppr,]
df_new <- df_new[!is.na(df_new$CODGEO),]
# Jointure des codes géographiques récents pour df2011
df2011 <- merge(df2011, modif, by.x = "CODGEO", by.y = "CODGEO_INI", all.x = TRUE)
# Gestion des chefs-lieux dans les fusions successives
# Suppression des chefs lieux des communes ayant fusionné a posteriori
df2011$ChefLieu <- ifelse(df2011$CODGEO == df2011$CODGEO_new, "O", "N")
# Transformation en factor d'un champ
#df_new$CATAEU2010 <- as.factor(df_new$CATAEU2010) # Ne sont plus dans les données à partir de 2021
df2011$CATAEU2010 <- as.factor(df2011$CATAEU2010)
NB : La gestion des communes s’étant scindée est complexe et imparfaite.
Il s’agit, pour chacune des tables, d’une cinquantaine de communes. Il peut être pertinent de les retirer de certaines analyses.
Un exemple de cas particulier : la commune de Les Hauts Talican (CODGEO 60054), issue de la fusion de Beaumont-les-Nonains (60054), La Neuville Garnier (60455) et Villotran (60694) mais dont Beaumont-les-Nonains se détache au 1er janvier 2024.
duplicated2 <- function(x){
if (sum(dup <- duplicated(x))==0)
return(dup)
if (class(x) %in% c("data.frame","matrix"))
duplicated(rbind(x[dup,],x))[-(1:sum(dup))]
else duplicated(c(x[dup],x))[-(1:sum(dup))]
}
df2011$doublons <- duplicated2(df2011$CODGEO)
summary(df2011$doublons)
## Mode FALSE
## logical 36208
doublons_df2011 <- subset(df2011, df2011$doublons == TRUE)
doublons_df2011
## [1] CODGEO LIBGEO CODE_DEPT
## [4] CATAEU2010 REG ARR
## [7] CV UU2010 AU2010
## [10] ZE2010 EPCI P09_ACT1564
## [13] P09_CHOM1564 P09_ETUD1564 P09_RETR1564
## [16] C09_ACT1564_Agr C09_ACT1564_ArtCom C09_ACT1564_Cadr
## [19] C09_ACT1564_ProfInt C09_ACT1564_Empl C09_ACT1564_Ouvr
## [22] P09_EMPLT C09_EMPLT_AGRI C09_EMPLT_INDUS
## [25] C09_EMPLT_CONST C09_EMPLT_CTS C09_EMPLT_APESAS
## [28] P09_ACTOCC P09_POP P09_POP0014
## [31] P09_POP1529 P09_POP3044 P09_POP4559
## [34] P09_POP6074 P09_POP75P C09_ACTOCC_IN
## [37] C09_ACTOCC_OUT C09_ACTOCC P11_POT_FIN
## [40] P11_DGF P11_FoyFisc P11_Rev_Fisc
## [43] P11_IMP_NET P11_FoyFisc_Imp superficie
## [46] CIF_2012 CIF_2015 ZAU_POL
## [49] ZAU_RUR ZAU_MAR_SP ZAU_MAR
## [52] ZAU_PERI ZAU_AU FUSION
## [55] ChefLieu ComDLG FusDate
## [58] FusPhas COM_NOUV CODGEO_new
## [61] LIBGEO_new doublons
## <0 lignes> (ou 'row.names' de longueur nulle)
df_new$doublons <- duplicated2(df_new$CODGEO)
summary(df_new$doublons)
## Mode FALSE
## logical 34439
doublons_df_new <- subset(df_new, df_new$doublons == TRUE)
doublons_df_new
## [1] CODGEO_new LIBGEO_new CODE_DEPT_new
## [4] REG_new CODGEO LIBGEO
## [7] CODE_DEPT CATAEU2010 REG
## [10] ARR CV UU2010
## [13] AU2010 ZE2010 EPCI
## [16] P09_ACT1564 P09_CHOM1564 P09_ETUD1564
## [19] P09_RETR1564 C09_ACT1564_Agr C09_ACT1564_ArtCom
## [22] C09_ACT1564_Cadr C09_ACT1564_ProfInt C09_ACT1564_Empl
## [25] C09_ACT1564_Ouvr P09_EMPLT C09_EMPLT_AGRI
## [28] C09_EMPLT_INDUS C09_EMPLT_CONST C09_EMPLT_CTS
## [31] C09_EMPLT_APESAS P09_ACTOCC P09_POP
## [34] P09_POP0014 P09_POP1529 P09_POP3044
## [37] P09_POP4559 P09_POP6074 P09_POP75P
## [40] C09_ACTOCC_IN C09_ACTOCC_OUT C09_ACTOCC
## [43] P11_POT_FIN P11_DGF P11_FoyFisc
## [46] P11_Rev_Fisc P11_IMP_NET P11_FoyFisc_Imp
## [49] superficie CIF_2012 CIF_2015
## [52] FUSION FusDate FusPhas
## [55] COM_NOUV doublons
## <0 lignes> (ou 'row.names' de longueur nulle)
df2011 <- df2011[,-ncol(df2011)]
df_new <- df_new[,-ncol(df_new)]
rm(doublons_df_new, doublons_df2011)
# On précise ici la date de la fusion du chef-lieu, qui est en général la date de la première fusion dans le cas de fusions successives
df_new <- merge(df_new, df2011[, c("CODGEO", "FusDate", "FusPhas")], by.x = "CODGEO_new", by.y = "CODGEO", all.x = TRUE, suffixes = c("", "_ChefLieu"))
# On intègre ici, pour toutes les communes nouvelles, le nombre de communes fusionnantes
compte_Cfus <- subset(df2011, df2011$COM_NOUV == "OUI")
compte_Cfus <- data.frame(table(compte_Cfus$CODGEO_new))
colnames(compte_Cfus) <- c("CODGEO_new", "NbrComFus")
df_new <- merge(df_new,compte_Cfus, by = "CODGEO_new", all.x = TRUE)
rm(compte_Cfus)
df_new$FusDate <- as.Date(df_new$FusDate, tryFormats = "%Y-%m-%d")
df_new$FusDateAnnee <- cut(df_new$FusDate,
breaks = as.Date(c("2011-1-1", "2012-1-2", "2013-1-2", "2014-1-2", "2015-1-2", "2016-1-2", "2017-1-2","2018-1-2", "2019-1-2", "2020-1-2", "2021-1-2", "2022-1-2", "2023-1-1", "2024-1-1")),
labels = c("2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023")) # NB : On intègre le 1er janvier d'une année n à l'année précédente n-1
df_new$FusDateAnnee_effectivite <- cut(df_new$FusDate,
breaks = as.Date(c("2011-1-1", "2012-1-1", "2013-1-1", "2014-1-1", "2015-1-1", "2016-1-1", "2017-1-1","2018-1-1", "2019-1-1", "2020-1-1", "2021-1-1", "2022-1-1", "2023-1-1", "2024-1-1")),
labels = c("2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023")) # Si on utilise l'année (1er janvier laissé dans l'année concernée)
ratio_tt <- as.data.frame(read_excel("data-raw/meta.xlsx", sheet = "ratios"))
# Comme pour les variables, seuls certains ratios sont sélectionnés
ratio <- subset(ratio_tt, variable_selec == "X")
# Compilation des ratios pour les communes 2011
for (i in 1:nrow(ratio)){
df2011[paste0(ratio[i,"CODE"])] <- (df2011[[ratio[i, "Numerator_Code"]]] /
df2011[[ratio[i, "Denominator_Code"]]]) * ratio[i,"Coeff"]
}
# Compilation des ratios pour les communes à la dernière géométrie connue
for (i in 1:nrow(ratio)){
df_new[paste0(ratio[i,"CODE"])] <- (df_new[[ratio[i, "Numerator_Code"]]] /
df_new[[ratio[i, "Denominator_Code"]]]) * ratio[i,"Coeff"]
}
Deux jeux de données ont ainsi été produits :
Le premier, df2011, contient l’ensemble des données
communales françaises désirées en fonction de la géographie
administrative au 1er janvier 2011.
Le second, df_new, contient les informations en
fonction de la géographie administrative du 1er janvier de la
dernière année pour laquelle les données ont été publiées par l’INSEE.
Les données 2011 ont été regroupées en fonction du fichier des fusions
délivré par l’INSEE, à l’aide de la fonction comix créée
plus haut. Le Tableau annexe 2 détaille les codes respectifs que ces
fichiers contiennent, ainsi qu’un descriptif de leur contenu.
Les variables présentes dans df_new sont identifiées de
la même manière que dans df2011. Les seules différences,
par exemple concernant les identifiants des communes, sont pointées par
le suffixe “_new” (ainsi le CODGEO_new désigne le code des
communes à la nouvelle géométrie) ou supprimées quand le champ n’a pas
de sens pour les communes fusionnantes 14.
Les jeux de données de référence sont finalement exportés dans le
dossier data au format RData.
# Trois lignes ci-desssous pour créer le dossier nécessaire à l'accueil des données créées
# setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) # On définit le dossier en cours comme répertoire de travail
# getwd() # Pour vérification
# dir.create("data") # création du dossier destiné à accueillir les données créées
try(save(df2011, df_new, file = "data/refdata.Rdata"))
Après le travail sur les données, ce sont les géométries qui ont été
agrégées pour correspondre aux géométries les plus récentes (ici,
1er janvier 2024). Des objets ont ensuite été spécifiquement
créés pour isoler et permettre de faciliter l’étude des communes
fusionnantes (geomfus2011) et des communes nouvelles
(geomCN_new).
# Communes françaises au 1er janvier 2011
geom2011 <- geom2011[,c("CODGEO")]
# Communes françaises à la géométrie la plus récente
geom_new <- merge(geom2011, df2011[,c("CODGEO","CODGEO_new")])
geom_new <- aggregate(x = geom_new[,"CODGEO_new"],
by = list(geom_new$CODGEO_new), FUN = head, 1)
geom_new <- geom_new[,c("CODGEO_new")]
# Communes nouvelles avant et après fusion
geomfus2011 <- merge(geom2011, df2011[,c("CODGEO", "COM_NOUV")])
geomCN_new <- merge(geom_new, df_new[,c("CODGEO_new", "COM_NOUV")])
geomfus2011 <- geomfus2011[geomfus2011$COM_NOUV == "OUI",]
geomfus2011 <- geomfus2011[,c("CODGEO")]
geomCN_new <- geomCN_new[geomCN_new$COM_NOUV == "OUI",]
geomCN_new <- geomCN_new[,c("CODGEO_new")]
Cinq couches géographiques ont été exportées dans le fichier
geom.gpkg (au sein du dossier “data”, cf. Figure
1) :
Les géométries communales au 1er janvier 2011
(geom2011).
Les géométries communales au 1er janvier de l’année la
plus récente pour laquelle des données ont été publiées par l’INSEE
(geom_new).
Les géométries des communes concernées par une création de
communes nouvelles, avant fusion (geomfus2011).
Les géométries des communes nouvelles, après fusion
(geomCN_new).
Une couche d’habillage pour faciliter les représentations
cartographiques15 : les départements
(dep).
# Export des fichiers consolidés
st_write(obj = geom2011, dsn = "data/geom.gpkg", layer = "geom2011", delete_layer = TRUE, quiet = TRUE)
st_write(obj = geom_new, dsn = "data/geom.gpkg", layer = "geom_new", delete_layer = TRUE, quiet = TRUE)
st_write(obj = geomfus2011, dsn = "data/geom.gpkg", layer = "geomfus2011", delete_layer = TRUE, quiet = TRUE)
st_write(obj = geomCN_new, dsn = "data/geom.gpkg", layer = "geomCN_new", delete_layer = TRUE, quiet = TRUE)
st_write(obj = dep, dsn = "data/geom.gpkg", layer = "dep",
delete_layer = TRUE, quiet = TRUE)
Nous proposons ici quelques exemples de traitements rendus possibles par la base de données ainsi constituée.
geom2011 <- st_read("data/geom.gpkg", layer = "geom2011", quiet = TRUE)
geom_new <- st_read("data/geom.gpkg", layer = "geom_new", quiet = TRUE)
geomfus2011 <- st_read("data/geom.gpkg", layer = "geomfus2011", quiet = TRUE)
geomCN_new <- st_read("data/geom.gpkg", layer = "geomCN_new", quiet = TRUE)
dep <- st_read("data/geom.gpkg", layer = "dep", quiet = TRUE)
load("data/refdata.Rdata")
datafus2011 <- subset(df2011, COM_NOUV == "OUI")
dataCN_new <- subset(df_new, COM_NOUV == "OUI")
dataNfus2011 <- subset(df2011, COM_NOUV == "NON")
# Import des méta-données
ratio_tt <- as.data.frame(read_excel("data-raw/meta.xlsx", sheet = "ratios"))
# Comme pour les variables, seuls certains ratios sont sélectionnés
ratio <- subset(ratio_tt, variable_selec == "X")
Un premier type d’analyse consiste à produire une vision chronologique des créations de communes nouvelles. On propose ici une visualisation du nombre de communes fusionnantes ayant rejoint une commune nouvelle pour une année donnée (on a plusieurs cas de fusions successives)16. Le graphique 1 montre le nombre de communes fusionnantes en fonction de l’année de la fusion (dans ce graphique, comme dans les tables de l’INSEE, les fusions effectives au 1er janvier d’une année n sont notées à l’année n-1). L’intensité variable des fusions au cours du temps y est particulièrement visible, d’où le choix qui a été fait de distinguer différentes périodes (six phases identifiées plus haut, cf. section 3.3.2). Cela permet d’envisager une comparaison des fusions en fonction de l’année de leur réalisation, par exemple sur le nombre de communes, leurs profils etc. On peut également cartographier la répartition des communes fusionnantes, en fonction des phases (Figure 2)17, ce qui permet d’observer une répartition très hétérogène à l’échelle française, déjà discutée (Bideau, 2019) et qui a pu conduire à des études régionales comme dans le Maine-et-Loire (Ohoussa, Margetic, 2020).
# datafus2011 <- comNew # Si on veut partir du fichier juste extrait des tables des communes nouvelles
# datafus2011$CODGEO <- datafus2011$DepComA
datafus2011 <- subset(df2011, COM_NOUV == "OUI") # Désigne les données concernant les communes ayant participé à la création d'une commune nouvelle, appelées ici communes fusionnantes
datafus2011$FusDate <- as.Date(datafus2011$FusDate, tryFormats = "%Y-%m-%d")
datafus2011$FusDateAnnee <- cut(datafus2011$FusDate,
breaks = as.Date(c("2011-1-1", "2012-1-2", "2013-1-2", "2014-1-2", "2015-1-2", "2016-1-2", "2017-1-2","2018-1-2", "2019-1-2", "2020-1-2", "2021-1-2", "2022-1-2", "2023-1-2", "2024-1-2")),
labels = c("2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023")) # NB : On intègre le 1er janvier d'une année n à l'année précédente n-1
time_serie <- data.frame(table(datafus2011$FusDateAnnee))
barplot(time_serie$Freq, xlab = " ", ylab = "Nombre de communes fusionnantes",
main = " ",# "Graphique 1 :\nNombre de communes fusionnantes\nen fonction de l'année de fusion",
ylim = c(0, 1300),
names.arg = time_serie$Var1)
grid(nx=0, ny = 10, col="gray", lwd=2)
Graphique 1 : Nombre de communes fusionnantes en fonction de l’année de fusion
geomfus2011 <- merge(geomfus2011, datafus2011, by = "CODGEO") # jointure données/géométries
# col <- c("#a50026","#d73027","#f46d43","#fdae61","#fee090", "#ffffbf") # Échelle rouge vers le plus clair
col <- c("#e31a1c", "#fb9a99", "#33a02c", "#b2df8a", "#1f78b4", "#a6cee3") # Échelle composée à partir de https://colorbrewer2.org/?type=qualitative&scheme=Paired&n=6
summary(geomfus2011$FusPhas)
## Length Class Mode
## 2571 character character
geomfus2011$FusPhas[geomfus2011$FusPhas == "Phase 1"] <- "Phase 1 2012-2014"
geomfus2011$FusPhas[geomfus2011$FusPhas == "Phase 2"] <- "Phase 2 2015"
geomfus2011$FusPhas[geomfus2011$FusPhas == "Phase 3"] <- "Phase 3 2016"
geomfus2011$FusPhas[geomfus2011$FusPhas == "Phase 4"] <- "Phase 4 2017"
geomfus2011$FusPhas[geomfus2011$FusPhas == "Phase 5"] <- "Phase 5 2018"
geomfus2011$FusPhas[geomfus2011$FusPhas == "Phase 6"] <- "Phase 6 2019-2024(01)"
svg("figures/Communes fusionnantes (2012-2024) par phases.svg")
plot(st_geometry(dep), border = "#1A1A19", col = "white", lwd = 1)
typoLayer(x = geomfus2011, var = "FusPhas",
col=col,
border = NA,
legend.title.cex = 0.7,
legend.values.cex = 0.6,
legend.title.txt = " ",
legend.pos = "left",
legend.values.order = c("Phase 1 2012-2014", "Phase 2 2015", "Phase 3 2016", "Phase 4 2017", "Phase 5 2018", "Phase 6 2019-2024(01)"),
add = T)
layoutLayer(title = " ", # "Figure 2 : Communes fusionnantes (2012-2022) par phases",
author = "Auteur : G. Bideau.",
tabtitle = TRUE, frame = FALSE, col = "white", coltitle = "black",
sources = "Sources : INSEE, IGN, 2024.")
dev.off()
## png
## 2
# geom2011 <- st_read("data/geom.gpkg", layer = "geom2011", quiet = TRUE)
carto <- merge(geom2011, datafus2011, by = "CODGEO") # jointure données/géométries
carto <- subset(carto, carto$FusDateAnnee == "2023")
# svg("figures/Communes fusionnantes (2023).svg")
plot(st_geometry(dep), border = "#1A1A19", col = "white", lwd = 1)
# plot(st_geometry(carto))
typoLayer(x = carto, var = "COM_NOUV",
col="red",
border = NA,
# legend.title.cex = 0.7,
# legend.values.cex = 0.6,
# legend.title.txt = " ",
legend.pos = "left",
add = TRUE)
# labelLayer(x = carto, txt = "LIBGEO_new",
# cex = 0.9, halo = TRUE, r = 0.15)
layoutLayer(title = "Les communes ayant fusionné pendant l'année 2023",
author = "Auteur : G. Bideau.",
tabtitle = TRUE, frame = FALSE, col = "white", coltitle = "black",
sources = "Sources : INSEE, IGN, 2024.")
# dev.off()
cartoCN <- merge(geomCN_new, dataCN_new, by = "CODGEO_new") # jointure données/géométries
cartoCN$FusDate <- as.Date(cartoCN$FusDate, tryFormats = "%Y-%m-%d")
cartoCN$FusDateAnnee <- cut(cartoCN$FusDate,
breaks = as.Date(c("2011-1-1", "2012-1-2", "2013-1-2", "2014-1-2", "2015-1-2", "2016-1-2", "2017-1-2","2018-1-2", "2019-1-2", "2020-1-2", "2021-1-2", "2022-1-2", "2023-1-2", "2024-1-2")),
labels = c("2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023")) # NB : On intègre le 1er janvier d'une année n à l'année précédente n-1
cartoCN <- subset(cartoCN, cartoCN$FusDateAnnee == "2023")
# svg("figures/Communes nouvelles (2023).svg")
plot(st_geometry(dep), border = "#1A1A19", col = "white", lwd = 1)
# plot(st_geometry(cartoCN))
typoLayer(x = cartoCN, var = "COM_NOUV",
col="red",
border = NA,
# legend.title.cex = 0.7,
# legend.values.cex = 0.6,
# legend.title.txt = " ",
legend.pos = "left",
add = TRUE)
labelLayer(x = cartoCN, txt = "LIBGEO_new",
cex = 0.9, halo = TRUE, r = 0.15)
layoutLayer(title = "Les communes nouvelles créées pendant l'année 2023",
author = "Auteur : G. Bideau.",
tabtitle = TRUE, frame = FALSE, col = "white", coltitle = "black",
sources = "Sources : INSEE, IGN, 2024.")
# dev.off()
rm(carto)
# Autre carte proposée, avec des cercles pour les communes nouvelles
geom_new <- merge(geom_new, df_new, by = "CODGEO_new") # jointure données/géométries
col <- c("#e31a1c", "#fb9a99", "#33a02c", "#b2df8a", "#1f78b4", "#a6cee3") # Échelle composée à partir de https://colorbrewer2.org/?type=qualitative&scheme=Paired&n=6
# summary(geom_new$FusPhas_ChefLieu)
geom_new$FusPhas_ChefLieu[geom_new$FusPhas_ChefLieu == "Phase 1"] <- "Phase 1 (2012-2014)"
geom_new$FusPhas_ChefLieu[geom_new$FusPhas_ChefLieu == "Phase 2"] <- "Phase 2 (2015)"
geom_new$FusPhas_ChefLieu[geom_new$FusPhas_ChefLieu == "Phase 3"] <- "Phase 3 (2016)"
geom_new$FusPhas_ChefLieu[geom_new$FusPhas_ChefLieu == "Phase 4"] <- "Phase 4 (2017)"
geom_new$FusPhas_ChefLieu[geom_new$FusPhas_ChefLieu == "Phase 5"] <- "Phase 5 (2018)"
geom_new$FusPhas_ChefLieu[geom_new$FusPhas_ChefLieu == "Phase 6"] <- "Phase 6 (2019-2021)"
svg("figures/Communes nouvelles (2012-2024) par phases - cercles.svg")
plot(st_geometry(dep), border = "#1A1A19", col = "white", lwd = 1)
propSymbolsTypoLayer(x = geom_new, var = "NbrComFus", var2 = "FusPhas_ChefLieu",
col = col,
border = "black", lwd = 0.15,
inches = 0.1,
legend.var.pos = "topright",
legend.var.title.txt = "Communes\nfusionnantes",
legend.var.style = "e",
legend.var2.values.order = c("Phase 1 (2012-2014)", "Phase 2 (2015)", "Phase 3 (2016)", "Phase 4 (2017)", "Phase 5 (2018)", "Phase 6 (2019-2021)"),
legend.var2.pos = "left",
legend.var2.title.txt = "Type",
legend.var2.frame = FALSE,
add = TRUE)
layoutLayer(title = " ", # "Figure 2 : Communes nouvelles (2012-2022) par phases",
author = "Auteur : G. Bideau.",
tabtitle = TRUE, frame = FALSE, col = "white", coltitle = "black",
sources = "Sources : INSEE, IGN, 2024.")
dev.off()
## png
## 2
À partir du zonage en aire urbaine élaboré par l’INSEE pour chaque commune (CATAEU2010)18, il est également possible d’analyser globalement le profil des communes fusionnantes en le comparant à celui des communes inchangées.
Les catégories utilisées ici sont celles définies par l’INSEE :
dataNfus2011 <- subset(df2011, COM_NOUV == "NON") # Les communes, à la géométrie 2011, qui n'ont pas participé à la création d'une commune nouvelle
ZAU_non <- data.frame(dataNfus2011$CATAEU2010)
ZAU_oui <- data.frame(datafus2011$CATAEU2010)
ZAU_non$Fusion <- "Communes inchangées"
ZAU_oui$Fusion <- "Communes fusionnantes"
colnames(ZAU_non)[1] <- "CATAEU2010"
colnames(ZAU_oui)[1] <- "CATAEU2010"
ZAU <- rbind(ZAU_oui, ZAU_non)
ZAU <- table(ZAU$Fusion, ZAU$CATAEU2010)
prop <- prop.table(ZAU, 1) * 100
barplot(prop,
xlab = "Catégories d'aire urbaine (ZAU INSEE)",
ylab = "Part du total des communes (%)",
# names.arg = c("Commune appartenant à un grand pôle", "Commune appartenant à la couronne d'un grand pôle", " Commune multipolarisée des grandes aires urbaines", "Commune appartenant à un moyen pôle", " Commune appartenant à la couronne d'un moyen pôle", "Commune appartenant à un petit pôle", "Commune appartenant à la couronne d'un petit pôle", "Autre commune multipolarisée", "Commune isolée hors influence des pôles"),
# names.arg = c("Grand pôle", "Couronne d'un grand pôle", " Multipolarisée des\ngrandes aires urbaines", "Moyen pôle", "Couronne d'un moyen pôle", "Petit pôle", "Couronne d'un petit pôle", "Autre commune\nmultipolarisée", "Commune isolée hors\ninfluence des pôles"),
main = " ",# "Graphique 2 :\nRépartition des communes fusionnantes ou non\nen fonction des catégories d'aire urbaine",
las = 2,
border = NA,
col=c("red","blue"), # "#ff87a9","#f7d358"
beside = TRUE)
legend(x="topright", legend = rownames(prop) , cex=0.8,
fill=c("red","blue"),bty="n")
tab.chi2 <- chisq.test(ZAU)
Graphique 2 : Répartition des communes fusionnantes ou non en fonction des catégories d’aire urbaine
Ainsi, les profils des communes fusionnantes et des communes inchangées sont relativement proches. Les écarts les plus importants se situent aux extrêmes. Les communes fusionnantes sont marquées par une plus faible représentation des communes centres de grands ou moyens pôles dans les communes nouvelles et une sur-représentation des communes multipolarisées ou hors influence des pôles. Un test du Chi² permet de rejeter l’hypothèse d’indépendance des deux variables (X² = 171.1609278, df = 8 et p-value = 7.3647899^{-33}).
D’autres traitements sont évidemment possibles avec la base de données réalisée, comme par exemple l’élaboration d’une typologie à l’aide d’une Classification par Ascendance Hiérarchique (CAH), qui a été réalisée pour les communes créées entre 2012 et le 1er janvier 2020 (Bideau, Ysebaert, 2022a).
La question de la taille des communes est un enjeu majeur de l’analyse des communes nouvelles. En effet, cette dernière pourrait être un facteur explicatif assez simple. Or une carte avec une trame départementale permet d’observer un résultat contre-intuitif : ce ne sont pas nécessairement les zones où il y a une sur-représentation des petites communes qui fusionnent le plus. Les départements avec de forts taux de communes de moins de 1000 habitants ne sont pas forcément ceux où les petites communes ont fusionné en grand nombre, par exemple dans l’Est de la France. Le pourcentage de communes de moins de 1000 habitants ayant fusionné est d’une manière générale très inégal, et faible dans de nombreux départements. Cela signifie que les procédures de création des communes nouvelles, dans de nombreux départements, ne résolvent pas le sujet des petites communes, alors que c’est un des objectifs du législateur.
ShpDep <- as(dep, "Spatial")
svg("figures/Communes nouvelles et petites communes (2012-2024).svg")
# Carte départementale sur communes de moins de 1000 habitants et nombre de fusions
# Carte choroplèthe en fonction du pourcentage de communes de moins de 1000 habitants
choroLayer(spdf = ShpDep, # SpatialPolygonsDataFrame
df = FusionsDep, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "PartComMoins1000habAv",
# Si on souhaite faire les groupes manuellement :
# breaks = c(0,0.27,5,10, 37), # liste des seuils (hypothèses)
# col = carto.pal(pal1 = "turquoise.pal", n1 = 6, pal2 = "blue.pal", n2 = 0),
# Si on souhaite avoir des groupes par quantiles :
col = carto.pal(pal1 = "red.pal", n1 = 4), method = "quantile",
nclass = 4,
add=FALSE,
legend.pos = "topleft",
legend.title.txt = "Pourcentage de communes\nde moins de 1000 habitants")
# On rajoute les cercles en fonction du nombre de communes de moins de 1000 habitants
propSymbolsLayer(spdf = ShpDep, # Ou à la place on peut utiliser "spdf = Communesfus" créé plus haut
df = FusionsDep,
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "ComMoins1000habAv",
inches = 0.2, fixmax = max(FusionsDep$ComMoins1000habAv),
#breakval = 3, # On précise une valeur tournant
symbols = "circle",
col = "grey",
#col2 = "red",
legend.pos = "bottomleft",
#legend.pos = "right"
#legend.title.txt = "\n\n\n\n\nNombre de\ncommunes\nde moins de\n1000 habitants",
legend.title.txt = "Communes\nde moins de\n1000 habitants",
legend.style = "c",
legend.frame = FALSE,
add = TRUE)
# On rajoute les cercles en fonction du nombre de communes ayant fusionné
propSymbolsLayer(spdf = ShpDep, # Ou à la place on peut utiliser "spdf = Communesfus" créé plus haut
df = FusionsDep,
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "NbrComFus",
inches = 0.2, fixmax = max(FusionsDep$ComMoins1000habAv),
#breakval = 3, # On précise une valeur tournant
symbols = "circle",
col = "blue",
#col2 = "red",
legend.pos = "left",
# legend.title.txt = "\n\nNombre de\ncommunes\nayant participé à la\ncréation d'une\ncommune nouvelle",
legend.title.txt = "\nCommunes\nfusionnantes",
legend.style = "c",
legend.frame = FALSE,
add = TRUE)
layoutLayer(title = "Communes nouvelles et petites communes par départements (2012-2024)", coltitle = "black",
sources = " Source : INSEE, IGN, 2024", scale = NULL,
author = " Auteur : G. Bideau", frame ="", col = NA, postitle = "center")
dev.off()
ShpDep <- as(dep, "Spatial")
# Pourcentage du nombre de communes fusionnantes ayant moins de 1000 habitants par rapport au nombre de communes ayant moins de 1000 habitants
FusionsDep$CMoins1000_Fus_prct <- 100 * FusionsDep$ComFusMoins1000hab / FusionsDep$ComMoins1000habAv
svg("figures/Communes nouvelles et petites communes 2 (2012-2024).svg")
# Carte départementale sur communes de moins de 1000 habitants et nombre de fusions
# Carte choroplèthe en fonction du pourcentage de communes de moins de 1000 habitants
choroLayer(spdf = ShpDep, # SpatialPolygonsDataFrame
df = FusionsDep, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "PartComMoins1000habAv",
# Si on souhaite faire les groupes manuellement :
# breaks = c(0,0.27,5,10, 37), # liste des seuils (hypothèses)
# col = carto.pal(pal1 = "turquoise.pal", n1 = 6, pal2 = "blue.pal", n2 = 0),
# Si on souhaite avoir des groupes par quantiles :
col = carto.pal(pal1 = "red.pal", n1 = 4), method = "quantile",
nclass = 4,
add=FALSE,
legend.pos = "topleft",
legend.title.txt = "Pourcentage de communes\nde moins de 1000 habitants")
# On rajoute les cercles en fonction du nombre de communes ayant fusionné et, en couleur, la part des communes fusionnantes de moins de 1000 habitants dans les communes de moins de 1000 habitants
propSymbolsChoroLayer(spdf = ShpDep, # Ou à la place on peut utiliser "spdf = Communesfus" créé plus haut
df = FusionsDep, spdfid = "CODE_DEPT", dfid = "CODE_DEPT",
var = "ComMoins1000habAv", inches = 0.18,
fixmax = max(FusionsDep$ComMoins1000habAv), symbols = "circle",
legend.var.pos = "left",
legend.var.title.txt = "Communes\nde moins de\n1000 habitants",
legend.var.style = "c",
legend.var.frame = FALSE,
var2 = "CMoins1000_Fus_prct",
legend.var2.pos = "bottomleft",
legend.var2.title.txt = "Pourcentage\nde communes\nayant fusionné\nparmi celles-ci",
add = TRUE)
layoutLayer(title = " ", #"Communes nouvelles et petites communes par départements (2012-2022)",
coltitle = "black",
sources = " Source : INSEE, IGN, 2024.", scale = NULL,
author = " Auteur : G. Bideau.", frame ="", col = NA, postitle = "center")
dev.off()
## png
## 2
L’existence de variables de contexte dans la base de données permet de comparer les caractéristiques des communes fusionnantes entre elles et par rapport aux communes non fusionnantes. Nous proposons ici deux graphiques concernant deux variables19. L’exploitation plus approfondie des variables de contexte a permis l’élaboration d’une typologie dégageant des profils de communes fusionnantes (Bideau, Ysebaert, 2022a).
Concernant la part des plus de 75 ans dans la population communale et la DGF par habitant, on remarque en premier lieu une assez grande similitude entre l’ensemble des communes fusionnantes et les autres communes. La part des personnes âges est, en revanche, inégale suivant les phases de fusions. Globalement les fusions les plus récentes ont été le fait de communes avec une proportion de plus de 75 ans davantage élevée, alors que la moyenne des communes fusionnantes est légèrement plus élevée que celle des autres communes. La DGF par habitant est peu différenciée, y compris en fonction des phases de fusions. Cependant, cet élément qui est un des moteurs de la décision de fusionner (Bideau, 2019) est au cœur des questions budgétaires, qui constituent notre agenda de recherche pour la suite de ce travail.
# varetud <- c("C09_EMPLT_AGRI_RT", "P09_CHOM1564_RT", "C09_ACTOCC_OUT_RT", "P09_POP75PY_RT", "P09_POP1529Y_RT")
varetud <- c("P09_POP75PY_RT", "P11_DGF_RT")
i <- "P09_POP75PY_RT"
col <- c("#e31a1c", "#fb9a99", "#33a02c", "#b2df8a", "#1f78b4", "#a6cee3", "grey60", "black") # Échelle composée à partir de https://colorbrewer2.org/?type=qualitative&scheme=Paired&n=6
for (i in varetud) {
# On crée un data frame avec les données souhaitées
df_boxplot <- df2011[c("COM_NOUV", i, "FusPhas")]
# Pour simplifier, on modifie les noms des colonnes
colnames(df_boxplot) <- c("COM_NOUV", "variable", "FusPhas")
# On indique les communes non fusionnantes
df_boxplot$FusPhas[is.na(df_boxplot$FusPhas)] <- "Autres\ncommunes"
df_boxplot$variable[df_boxplot$variable == Inf ] <- NA
# On rajoute les communes fusionnantes (donc présentes deux fois) en leur adjoignant une nouvelle étiquette, pour avoir leur moyenne globale
df_boxplot_cfus <- subset(df_boxplot, df_boxplot$FusPhas != "Autres\ncommunes")
df_boxplot_cfus$FusPhas <- "Communes\nfusionnantes "
df_boxplot <- rbind (df_boxplot, df_boxplot_cfus)
df_boxplot$FusPhas <- factor (df_boxplot$FusPhas, levels = c("Phase 1", "Phase 2", "Phase 3", "Phase 4", "Phase 5", "Phase 6", "Communes\nfusionnantes ", "Autres\ncommunes"))
# On retire les valeurs manquantes
df_boxplot <- na.omit(df_boxplot)
# On retire les valeurs extrêmes pour rendre le graphique lisible
upper.limit <- quantile(df_boxplot$variable, na.rm = TRUE, probs = seq(.01, .99, by = .01))[99]
df_boxplot <- subset(df_boxplot, df_boxplot$variable <= upper.limit)
# Pour obtenir le nom de la variable concernée dans le cas des variables en pourcentage
num_variable <- which(ratio$CODE == i)
nom_variable <- ratio[num_variable, "DESCRIPTION"]
boxplot <- ggplot(df_boxplot, aes(x = FusPhas, y = variable, # Utiliser get(i) si noms de colonnes non modifiés
color = FusPhas)) +
geom_boxplot() +
scale_color_manual(values=col) +
ylab(paste0(nom_variable)) +
xlab("Phase de la fusion") +
ggtitle(paste0(" ", " "))
boxplot <- boxplot + scale_fill_discrete(name = "Test_nom_légende")
boxplot
print (boxplot)
# On modifie éventuellement le graphique pour le rendre plus lisible si valeurs extrêmes
# upper.limit <- quantile(df_boxplot$variable, na.rm = TRUE)[4] + 4*IQR(df_boxplot$variable, na.rm = TRUE)
# lower.limit <- quantile(df_boxplot$variable, na.rm = TRUE)[2] - 4*IQR(df_boxplot$variable, na.rm = TRUE)
#
# upper.limit <- quantile(df_boxplot$variable, na.rm = TRUE, probs = seq(.01, .99, by = .01))[99]
# lower.limit <- quantile(df_boxplot$variable, na.rm = TRUE, probs = seq(.01, .99, by = .01))[1]
#
# print (boxplot + coord_cartesian(ylim=c(lower.limit, upper.limit)))
# Possibilité de vérifier la fiabilité des données avec le test de Kruskal-Wallis
## https://www.datanovia.com/en/fr/lessons/test-de-kruskal-wallis-dans-r/
# res.kruskal <- df_boxplot %>% rstatix::kruskal_test(variable ~ FusPhas)
# res.kruskal
# La p-value représente le pourcentage de chance de se tromper en considérant que les différences entre les variables sont significatives. Les valeurs d’interprétation couramment utilisées dans la littérature sont : 0,01- < 0,06 (petit effet), 0,06 - < 0,14 (effet modéré) et >= 0,14 (effet important).
}
Figures 4 : Part des 75 ans et plus dans la population des communes, distribuées par phases pour les communes fusionnantes
Figures 5 : Dotation Globale de Fonctionnement (DGF) par habitant des communes, distribuées par phases pour les communes fusionnantes
La base de données DAC (Données Agrégées des Communes) 2011-2022 permet une analyse approfondie du phénomène des communes nouvelles, au sein de l’ensemble des communes françaises. Qu’il s’agisse de décrire les entités y ayant participé (les communes fusionnantes), les nouvelles entités créées (les communes nouvelles) ou les transformations qu’impliquent la fusion, de nombreuses études sont possibles, pour compléter les premières approches qui ont pu être proposées à l’aide de cette base (Bideau, 2019 ; Bideau, Giraut, 2022 ; Bideau, Ysebaert, 2022a).
Au-delà de la question des communes nouvelles, les regroupements d’entités géographiques se retrouvent à de multiples échelles et dans de nombreux contextes. L’analyse pourra en être facilitée grâce à la reproductibilité de la démarche et à la possibilité d’intégration de nouvelles données annuelles, en fonction des évolutions des fusions. A posteriori ou a priori, les décisions politiques gagneront toujours à une évaluation ouverte et transparente de leurs conséquences.
Le tableau suivant résume les indicateurs ciblés pour la collecte de données. S’il s’agit de variables de stock, elles constituent alors des numérateurs et dénominateurs qui seront, par la suite, composées en ratios.
Ces données sont accessibles sur les sites des institutions
concernées à partir des noms des jeux de données présents dans la table
ci-dessous (les chemins sont précisés dans les métadonnées, cf.
fichier meta.xlsx). Nous avons utilisé ici les données par
âge et en fonction des Catégories Socio-Professionnelles (CSP) car elles
nous paraissaient susceptibles, en toute hypothèse, d’être de bons
indicateurs pour catégoriser le profil des communes. Cependant, des
données bien plus larges (concernant par exemple le sexe ou les secteurs
d’activité) sont présentes dans les fichiers sources, leur ajout dans la
base de données ne nécessite qu’une sélection au sein du fichier
meta.xlsx puis de relancer l’ensemble du code.
variables <- as.data.frame(read_excel("data-raw/meta.xlsx", sheet = "ind_target"))
# Pour sélectionner de nouvelles variables, cocher avec "X" dans le fichier meta.xlsx
target <- subset(variables, variable_selec == "X")
tableau <- target[,c("INSEE_CODE","DESCRIPTION", "SOURCE", "PRODUCTEUR")]
colnames(tableau) <- c("Nom de la variable", "Description", "Source", "Producteur")
# knitr::kable(target[,c("INSEE_CODE","DESCRIPTION", "SOURCE", "PRODUCTEUR")], row.names = F, digits = 1) # Pour export html
ft <- flextable(tableau)
ft <- set_caption(ft, caption = "Tableau annexe 1 : Les indicateurs d'intérêt sélectionnés")
ft <- width(ft, width = 1.7)
ft
Nom de la variable | Description | Source | Producteur |
|---|---|---|---|
CODGEO | Code INSEE, découpage géographique au 01/01/2011 | Toutes tables | INSEE |
LIBGEO | Nom de la commune, découpage géographique au 01/01/2011 | Toutes tables | INSEE |
CODE_DEPT | Département | Toutes tables | INSEE |
CATAEU2010 | Catégorie de communes dans le zonage en aires urbaines 2010 | Table d'appartenance des communes (2011) | INSEE |
REG | Région | Table d'appartenance des communes (2011) | INSEE |
ARR | Arrondissement | Table d'appartenance des communes (2011) | INSEE |
CV | Canton de ville | Table d'appartenance des communes (2011) | INSEE |
UU2010 | Unité urbaine 2010 | Table d'appartenance des communes (2011) | INSEE |
AU2010 | Aire urbaine 2010 | Table d'appartenance des communes (2011) | INSEE |
ZE2010 | Zone d'emploi 2010 | Table d'appartenance des communes (2011) | INSEE |
EPCI | EPCI | Table d'appartenance des communes (2011) | INSEE |
P09_ACT1564 | Actifs 15-64 ans en 2009 | Base Emploi - population active en 2009 | INSEE |
P09_CHOM1564 | Chômeurs 15-64 ans en 2009 | Base Emploi - population active en 2009 | INSEE |
P09_ETUD1564 | Elèv. Etud. Stag. non rémunérés 15-64 ans en 2009 | Base Emploi - population active en 2009 | INSEE |
P09_RETR1564 | Retraités Préretraités 15-64 ans en 2009 | Base Emploi - population active en 2009 | INSEE |
C09_ACT1564_CS1 | Actifs 15-64 ans Agriculteurs exploitants en 2009 | Base Emploi - population active en 2009 | INSEE |
C09_ACT1564_CS2 | Actifs 15-64 ans Artisans, Comm., Chefs entr. en 2009 | Base Emploi - population active en 2009 | INSEE |
C09_ACT1564_CS3 | Actifs 15-64 ans Cadres, Prof. intel. sup. en 2009 | Base Emploi - population active en 2009 | INSEE |
C09_ACT1564_CS4 | Actifs 15-64 ans Prof. intermédiaires en 2009 | Base Emploi - population active en 2009 | INSEE |
C09_ACT1564_CS5 | Actifs 15-64 ans Employés en 2009 | Base Emploi - population active en 2009 | INSEE |
C09_ACT1564_CS6 | Actifs 15-64 ans Ouvriers en 2009 | Base Emploi - population active en 2009 | INSEE |
P09_EMPLT | Emplois au LT en 2009 | Base Emploi - population active en 2009 | INSEE |
C09_EMPLT_AGRI | Emplois au LT Agriculture en 2009 | Base Emploi - population active en 2009 | INSEE |
C09_EMPLT_INDUS | Emplois au LT Industrie en 2009 | Base Emploi - population active en 2009 | INSEE |
C09_EMPLT_CONST | Emplois au LT Construction en 2009 | Base Emploi - population active en 2009 | INSEE |
C09_EMPLT_CTS | Emplois au LT Commerce, Transports, Services divers en 2009 | Base Emploi - population active en 2009 | INSEE |
C09_EMPLT_APESAS | Emplois au LT Adm publique, Enseignement, Santé, Act sociale en 2009 | Base Emploi - population active en 2009 | INSEE |
P09_ACTOCC | Actifs occupés 15-64 ans en 2009 | Base Emploi - population active en 2009 | INSEE |
P09_POP | Population en 2009 | Base Évolution et structure de la population en 2009 | INSEE |
P09_POP0014 | Pop 0-14 ans en 2009 | Base Évolution et structure de la population en 2009 | INSEE |
P09_POP1529 | Pop 15-29 ans en 2009 | Base Évolution et structure de la population en 2009 | INSEE |
P09_POP3044 | Pop 30-44 ans en 2009 | Base Évolution et structure de la population en 2009 | INSEE |
P09_POP4559 | Pop 45-59 ans en 2009 | Base Évolution et structure de la population en 2009 | INSEE |
P09_POP6074 | Pop 60-74 ans en 2009 | Base Évolution et structure de la population en 2009 | INSEE |
P09_POP75P | Pop 75 ans ou plus en 2009 | Base Évolution et structure de la population en 2009 | INSEE |
C09_ACTOCC15P_ILT1 | Nombre d'actifs travaillant dans leur commune (ou arrondissement municipal) de résidence | Base Mobilités professionnelles en 2009 | INSEE |
C09_ACTOCC15P_ILTAUT | Nombre d'actifs travaillant hors de leur commune (ou arrondissement municipal) de résidence | Base Mobilités professionnelles en 2009 | INSEE |
C09_ACTOCC15P | Total : nombre d'actifs de 15 ans ou plus ayant un emploi | Base Mobilités professionnelles en 2009 | INSEE |
Potentiel.Financier | Potentiel financier des communes | Potentiel financier | DGCL |
dotation.globale.de.fonctionnement | Dotation globale de fonctionnement des communes en 2011 | Données comptables et fiscales des collectivités locales | DGCL |
Nombre.de.foyers.fiscaux | Nombre de foyers fiscaux dans la commune en 2011 | L'impôt sur le revenu par collectivité territoriale | Ministère de l'économie |
Revenu.fiscal.de.référence.des.foyers.fiscaux | Revenu fiscal de référence de l'ensemble des foyers imposés sur la commune | L'impôt sur le revenu par collectivité territoriale | Ministère de l'économie |
Impôt.net..total. | Impôt net total sur la commune | L'impôt sur le revenu par collectivité territoriale | Ministère de l'économie |
Nombre.de.foyers.fiscaux.imposables | Nombre de foyers fiscaux imposables sur la commune | L'impôt sur le revenu par collectivité territoriale | Ministère de l'économie |
superficie | Superficie (km²) | Geofla®Communes édition 2011 (France Métropolitaine) | IGN |
CIF_2012 | Coefficient d'Intégration Fiscal de l'EPCI auquel appartient la commune | DGCL (Adrien Meo) | DGCL |
CIF_2015 | Coefficient d'Intégration Fiscal de l'EPCI auquel appartient la commune | DGCL (Adrien Meo) | DGCL |
Ce tableau détaille les codes et descriptions des variables contenues dans la base DAC (Données Agrégées des Communes) 2011-2024(01) (c’est-à-dire intégrant les données au 1er janvier 2024).
codes <- names(df2011)
codes_que_df_new <- c("FusDate_ChefLieu", "FusPhas_ChefLieu", "NbrComFus", "FusDateAnnee", "FusDateAnnee_effectivite")
codes <- c(codes, codes_que_df_new)
nums <- target$DESCRIPTION
zau <- c("Petit pôle et couronne de petits pôles (catégories 221 et 222 du zonage en aires urbaines (OUI/NON)",
"Communes n'appartenant à la couronne d'aucun pôle (catégories 300 et 400 du zonage en aires urbaines (OUI/NON)",
"Marges sans pôles (catégories 222, 300 et 400 du zonage en aires urbaines (OUI/NON)",
"Rural profond + petits pôles et couronnes (catégories 221, 222, 300 et 400 du zonage en aires urbaines (OUI/NON)",
"Périurbain de grands pôles (catégories 112 et 120 du zonage en aires urbaines (OUI/NON)",
"Typologie regroupée basées sur les aires urbaines : GrdAirUrb (catégories 111, 112, 120), AirUrb (211, 212, 221, 222) et Autres (300, 400)")
change <- c(
"Est-ce que la commune a fusionné entre 2011 et aujourd'hui (OUI/NON)",
"Commune nouvelle : Statut de commune chef-lieu (O=OUI, N=NON)",
"Commune nouvelle : Statut de Commune déléguée (O=OUI, N=NON)",
"Date d'effet de la création de commune nouvelle",
"Phase dans le processus de fusion (phase 1 = 2011-2015, 2 = 2015-2016, 3 = 2016-2017, 4 = 2017-2018, 5 = 2018-2020, 6 = 2020-2022",
"Est-ce que la commune est devenue une commune nouvelle (OUI/NON)",
"Code INSEE, découpage géographique le plus récent",
"Nom de la commune, découpage géographique le plus récent")
description_que_df_new <- c("Date d'effet de la création de la commune nouvelle pour la commune chef-lieu [spécifique df_new]",
"Phase dans le processus de fusion, pour la commune chef-lieu [spécifique df_new]",
"Nombre de communes fusionnantes au sein de la commune nouvelle [spécifique df_new]",
"Année de la fusion, en intégrant le 1er janvier de l'année n+1 à l'année n (donc année globalement de décision)",
"Année de la fusion, officielle (1er janvier laissé dans l'année concernée)")
rates <- ratio$DESCRIPTION
label <- c(nums, zau, change, rates, description_que_df_new)
tab <- data.frame(codes, label)
colnames(tab) <- c("Nom de la variable", "Description")
# knitr::kable(tab, row.names = F) # Pour export html
ft <- flextable(tab)
ft <- set_caption(ft, caption = "Tableau annexe 2 : Les variables présentes dans la base de données DAC 2011-2022")
ft <- width(ft, width = 4)
ft
Nom de la variable | Description |
|---|---|
CODGEO | Code INSEE, découpage géographique au 01/01/2011 |
LIBGEO | Nom de la commune, découpage géographique au 01/01/2011 |
CODE_DEPT | Département |
CATAEU2010 | Catégorie de communes dans le zonage en aires urbaines 2010 |
REG | Région |
ARR | Arrondissement |
CV | Canton de ville |
UU2010 | Unité urbaine 2010 |
AU2010 | Aire urbaine 2010 |
ZE2010 | Zone d'emploi 2010 |
EPCI | EPCI |
P09_ACT1564 | Actifs 15-64 ans en 2009 |
P09_CHOM1564 | Chômeurs 15-64 ans en 2009 |
P09_ETUD1564 | Elèv. Etud. Stag. non rémunérés 15-64 ans en 2009 |
P09_RETR1564 | Retraités Préretraités 15-64 ans en 2009 |
C09_ACT1564_Agr | Actifs 15-64 ans Agriculteurs exploitants en 2009 |
C09_ACT1564_ArtCom | Actifs 15-64 ans Artisans, Comm., Chefs entr. en 2009 |
C09_ACT1564_Cadr | Actifs 15-64 ans Cadres, Prof. intel. sup. en 2009 |
C09_ACT1564_ProfInt | Actifs 15-64 ans Prof. intermédiaires en 2009 |
C09_ACT1564_Empl | Actifs 15-64 ans Employés en 2009 |
C09_ACT1564_Ouvr | Actifs 15-64 ans Ouvriers en 2009 |
P09_EMPLT | Emplois au LT en 2009 |
C09_EMPLT_AGRI | Emplois au LT Agriculture en 2009 |
C09_EMPLT_INDUS | Emplois au LT Industrie en 2009 |
C09_EMPLT_CONST | Emplois au LT Construction en 2009 |
C09_EMPLT_CTS | Emplois au LT Commerce, Transports, Services divers en 2009 |
C09_EMPLT_APESAS | Emplois au LT Adm publique, Enseignement, Santé, Act sociale en 2009 |
P09_ACTOCC | Actifs occupés 15-64 ans en 2009 |
P09_POP | Population en 2009 |
P09_POP0014 | Pop 0-14 ans en 2009 |
P09_POP1529 | Pop 15-29 ans en 2009 |
P09_POP3044 | Pop 30-44 ans en 2009 |
P09_POP4559 | Pop 45-59 ans en 2009 |
P09_POP6074 | Pop 60-74 ans en 2009 |
P09_POP75P | Pop 75 ans ou plus en 2009 |
C09_ACTOCC_IN | Nombre d'actifs travaillant dans leur commune (ou arrondissement municipal) de résidence |
C09_ACTOCC_OUT | Nombre d'actifs travaillant hors de leur commune (ou arrondissement municipal) de résidence |
C09_ACTOCC | Total : nombre d'actifs de 15 ans ou plus ayant un emploi |
P11_POT_FIN | Potentiel financier des communes |
P11_DGF | Dotation globale de fonctionnement des communes en 2011 |
P11_FoyFisc | Nombre de foyers fiscaux dans la commune en 2011 |
P11_Rev_Fisc | Revenu fiscal de référence de l'ensemble des foyers imposés sur la commune |
P11_IMP_NET | Impôt net total sur la commune |
P11_FoyFisc_Imp | Nombre de foyers fiscaux imposables sur la commune |
superficie | Superficie (km²) |
CIF_2012 | Coefficient d'Intégration Fiscal de l'EPCI auquel appartient la commune |
CIF_2015 | Coefficient d'Intégration Fiscal de l'EPCI auquel appartient la commune |
ZAU_POL | Petit pôle et couronne de petits pôles (catégories 221 et 222 du zonage en aires urbaines (OUI/NON) |
ZAU_RUR | Communes n'appartenant à la couronne d'aucun pôle (catégories 300 et 400 du zonage en aires urbaines (OUI/NON) |
ZAU_MAR_SP | Marges sans pôles (catégories 222, 300 et 400 du zonage en aires urbaines (OUI/NON) |
ZAU_MAR | Rural profond + petits pôles et couronnes (catégories 221, 222, 300 et 400 du zonage en aires urbaines (OUI/NON) |
ZAU_PERI | Périurbain de grands pôles (catégories 112 et 120 du zonage en aires urbaines (OUI/NON) |
ZAU_AU | Typologie regroupée basées sur les aires urbaines : GrdAirUrb (catégories 111, 112, 120), AirUrb (211, 212, 221, 222) et Autres (300, 400) |
FUSION | Est-ce que la commune a fusionné entre 2011 et aujourd'hui (OUI/NON) |
ChefLieu | Commune nouvelle : Statut de commune chef-lieu (O=OUI, N=NON) |
ComDLG | Commune nouvelle : Statut de Commune déléguée (O=OUI, N=NON) |
FusDate | Date d'effet de la création de commune nouvelle |
FusPhas | Phase dans le processus de fusion (phase 1 = 2011-2015, 2 = 2015-2016, 3 = 2016-2017, 4 = 2017-2018, 5 = 2018-2020, 6 = 2020-2022 |
COM_NOUV | Est-ce que la commune est devenue une commune nouvelle (OUI/NON) |
CODGEO_new | Code INSEE, découpage géographique le plus récent |
LIBGEO_new | Nom de la commune, découpage géographique le plus récent |
P09_CHOM1564_RT | Taux de chômage des 15-64 ans (%) |
P09_ETUD1564_RT | Part des étudiants, stagiaires, non rémunérés dans les actifs de 15-64 ans (%) |
P09_RETR1564_RT | Part des retraités et pré-retraités dans les actifs de 15-64 ans (%) |
C09_ACT1564_Agr_RT | Part des agriculteurs dans les actifs de 15-64 ans (%) |
C09_ACT1564_ArtCom_RT | Part des artisans, comm., chefs entr. dans les actifs de 15-64 ans (%) |
C09_ACT1564_Cadr_RT | Part des cadres, prof. intel. sup. dans les actifs de 15-64 ans (%) |
C09_ACT1564_ProfInt_RT | Part des prof. intermédiaires dans les actifs de 15-64 ans (%) |
C09_ACT1564_Empl_RT | Part des employés dans les actifs de 15-64 ans (%) |
C09_ACT1564_Ouvr_RT | Part des ouvriers dans les actifs de 15-64 ans (%) |
C09_EMPLT_AGRI_RT | Part de l'agriculture dans l'emploi au lieu de travail (%) |
C09_EMPLT_INDUS_RT | Part de l'industrie dans l'emploi au lieu de travail (%) |
C09_EMPLT_CONST_RT | Part de la construction dans l'emploi au lieu de travail (%) |
C09_EMPLT_CTS_RT | Part du commerce, transports, services divers dans l'emploi au lieu de travail (%) |
C09_EMPLT_APESAS_RT | Part de l'adm publique, enseignement, santé, act sociale dans l'emploi au lieu de travail (%) |
P09_POP0014Y_RT | Part des 0-14 ans dans la population totale (%) |
P09_POP1529Y_RT | Part des 15-29 ans dans la population totale (%) |
P09_POP3044Y_RT | Part des 30-44 ans dans la population totale (%) |
P09_POP4559Y_RT | Part des 45-59 ans dans la population totale (%) |
P09_POP6074Y_RT | Part des 60-74 ans dans la population totale (%) |
P09_POP75PY_RT | Part des 75 ans et plus dans la population totale (%) |
C09_ACTOCC_IN_RT | Part des actifs occupés travaillant dans leur commune de résidence (%) |
C09_ACTOCC_OUT_RT | Part des actifs occupés travaillant hors de leur commune de résidence (%) |
C09_EMP_CONC_RT | Concentration d'emploi au lieu de travail (nombre d'actifs occupés = 100) |
P11_POT_FIN_RT | Potentiel financier par habitant (euros) |
P11_DGF_RT | Dotation globale de fonctionnement par habitant (euros) |
P11_Rev_Fisc_RT | Revenu fiscal de référence par habitant (euros) |
P11_IMP_NET_RT | Impôt net par habitant (euros) |
P11_FoyFisc_Imp_RT | Pourcentage de foyers fiscaux imposables |
FusDate_ChefLieu | Date d'effet de la création de la commune nouvelle pour la commune chef-lieu [spécifique df_new] |
FusPhas_ChefLieu | Phase dans le processus de fusion, pour la commune chef-lieu [spécifique df_new] |
NbrComFus | Nombre de communes fusionnantes au sein de la commune nouvelle [spécifique df_new] |
FusDateAnnee | Année de la fusion, en intégrant le 1er janvier de l'année n+1 à l'année n (donc année globalement de décision) |
FusDateAnnee_effectivite | Année de la fusion, officielle (1er janvier laissé dans l'année concernée) |
coldf2011 <- colnames(df2011)
coldfnew <- colnames(df_new)
# On liste les variables présentes seulement dans une des tables
setdiff(coldf2011, coldfnew)
setdiff(coldfnew, coldf2011)
Un grand merci à tous ceux qui ont contribué à améliorer ce travail, en particulier Renaud Le Goix et les relecteurs de la revue Cybergéo.
Particulièrement avec les lois MAPTAM et NOTRe (“Loi n-58 du 27 janvier 2014 de modernisation de l’action publique territoriale et d’affirmation des métropoles,” 2014 ; “Loi n-991 du 7 août 2015 portant nouvelle organisation territoriale de la République,” 2015).↩︎
Pour une présentation plus complète du package, cf. https://antuki.github.io/COGugaison/articles/COGugaison.html ainsi qu’un partenariat récent avec l’Observatoire des Territoires https://www.observatoire-des-territoires.gouv.fr/kiosque/2021-article-un-diagnostic-de-cog-en-deux-clics. Précisons également que le package a été publié à partir de 2017, c’est-à-dire après le début de nos travaux sur les communes nouvelles et la réalisation de notre base de données, raison pour laquelle nous ne l’avons pas forcément utilisé dans notre démarche.↩︎
Une version du texte de ce data paper est publiée au format RMarkdown (.Rmd) avec le dépôt de données, de manière à documenter le code nécessaire à la reproduction de la démarche. Nous tenons à remercier chaleureusement tous ceux qui ont participé à l’élaboration de ce data paper, en particulier Renaud Le Goix ainsi que les membres du comité de lecture de Cybergéo pour la qualité de leurs remarques et suggestions.↩︎
L’exemple le plus typique est le cas de la commune de l’Oudon, qui a changé plusieurs fois de code officiel, cf. plus bas (section 3.3.2) pour plus de détails.↩︎
Nous désignons ainsi les communes ayant participé à la fusion, parfois appelées également communes « historiques » ; le terme de « commune nouvelle », inscrit dans la loi, désigne la nouvelle entité, après la fusion.↩︎
La mention d’un millésime ne signifie d’ailleurs pas qu’il s’agisse de données recensées sur cette année précisément puisqu’aujourd’hui le recensement général est calculé à partir des données issues de cinq enquêtes, le millésime correspondant à l’année médiane ; cf. les précisions de l’INSEE ici. Les tables de l’INSEE utilisées sont au millésime 2009 mais les tables concernant les données fiscales sont en général au millésime 2011, la collecte des données se faisant différemment.↩︎
Il suffit de sélectionner les variables en question au
sein du fichier meta.xlsx puis de relancer l’ensemble du
code.↩︎
Les tables de passages de l’INSEE comprennent les fusions du 2 janvier de l’année indiquée jusqu’au 1er janvier de l’année suivante, inclus. Par exemple, la première table de passage, publiée en 2016 et appelée table de passage “2015” comprend toutes les fusions du 2 janvier 2015 au 1er janvier 2016.↩︎
À noter que la variable de superficie n’a pas été importée mais calculée à partir des données de l’IGN.↩︎
Depuis quelques années, la table des fusions de l’année précédente est publiée vers le mois de janvier, celle “de passage” 2003-xxxx et celle “d’appartenance” quelques semaines après.↩︎
Le statut de commune nouvelle a été presque unanimement plébiscité dans le cas de fusions communales depuis 2012. On peut noter comme exception le cas jusqu’ici unique de Fontenoy-le-Château (Vosges), commune nouvelle créée au 1er janvier 2013 mais dont la fusion a été transformée en fusion simple le 7 janvier de la même année.↩︎
Les fichiers fournis par l’INSEE ne sont pas formatés de façon homogène, nécessitant des conversions de format. Par exemple, les dates sont renseignées au format texte jusqu’à 2017 et au format date à partir de 2018. Nous avons préalablement converti les champs date au format texte pour l’ensemble des fichiers. Cela signifie qu’en cas de mise à jour des données ou de modification de l’usage du code par un utilisateur, il faudra de nouveau convertir les dates au format texte au préalable. Ces informations ont été regroupées au sein d’un seul objet.↩︎
Dans certains cas, une date peut ne pas être renseignée car il s’agit, par défaut, de la valeur au 1er janvier de l’année suivante. Ces champs ont alors été complétés, suivant les informations sur les données manquantes dans la documentation des fichiers INSEE disponibles ici).↩︎
Les variables dédiées aux chefs-lieux et aux communes
déléguées (codes ChefLieu et ComDLG) ne sont
pas inclues dans le jeu de données aux géographies récentes, car non
adaptées à ce niveau de granularité géographique. D’autre part, la
catégorie de Zonage en Aires Urbaines n’est plus disponible à partir de
2021. À l’inverse, quelques variables sont spécifiques à la base
df_new, comme le nombre de communes ayant participé à la
création d’une commune nouvelle (NbrComFus).↩︎
D’autres couches peuvent être aisément réalisées à partir des données d’appartenance aux régions, intercommunalités ou autres, contenues dans les jeux de données cités plus haut.↩︎
Dans le cas de fusions successives, nous avons préféré considérer que celles-ci avaient eu lieu en une fois. Par exemple, la commune de Auneau-Bleury-Saint-Symphorien (Eure-et-Loir) est issue officiellement de la fusion de deux communes : Auneau et Bleury-Staint-Symphorien au 1^er janvier 2016 mais cette dernière commune est elle-même le résultat d’une fusion au 1^er janvier 2012 entre Bleury et Saint-Symphorien. Nous avons donc considéré, dans une logique d’analyse plutôt qu’administrative, que la commune nouvelle était le résultat de la fusion de trois communes. Ces cas particuliers restent relativement anecdotiques d’un point de vue statistique.↩︎
Dans le cas de fusions successives, la commune nouvelle est présentée comme ayant été créée à la date de fusion de la commune aujourd’hui chef-lieu.↩︎
Ce zonage est désormais remplacé par le zonage en aires d’attraction des villes (et n’est donc plus disponible pour les géographies administratives depuis le 1er janvier 2021). Cependant, il reste pertinent ici puisqu’il s’agit du zonage disponible pour l’année de référence avant fusion (2011).↩︎
Pour faciliter la lisibilité, les valeurs du centile le plus élevé ont été supprimées de la représentation graphique.↩︎